Python基本图形的绘制

曲线图— 画出 y=x2+2x+1y=x2+2x+1 在区间[-5,3]的函数图像。

# 导入包
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import warnings
warnings.filterwarnings = False
# 使文字可以展示
plt.rcParams['font.sans-serif'] = ['SimHei']
# 使负号可以展示
plt.rcParams['axes.unicode_minus'] = False
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
x = np.linspace(-5,3)
y = x**2 +2*x +1
# 画图
plt.plot(x,y,'b--')
# 设置x轴标签
plt.xlabel('x轴取值范围')
# 设置y轴标签
plt.ylabel('y轴取值范围')
# 设置图形标题
plt.title('y  = x**2 + 2*x +1 的图')
# 展示图片
plt.show()

在这里插入图片描述

折线图—在同一张图中创建两个子图,分别画出sinx和cosx在[-3.14,3.14]上的函数图像。设置线条宽度为2.5.

# 设置图形大小
plt.figure(figsize = (10,6))
# 设置图形的子图个数
plt.subplot(211)
# x轴取值范围
x = np.arange(-np.pi,np.pi)
y1 = np.cos(x)
y2 = np.sin(x)
# 画图
plt.plot(x,y1,linewidth = 2.5)
# 设置图形标题
plt.title('sin(x)')
plt.subplot(212)
plt.plot(x,y2,linewidth = 2.5)
# 设置图形标题
plt.title('cos(x)')
plt.show()

在这里插入图片描述

柱形图—每个地区酒店数量

data = pd.read_excel('酒店数据2.xlsx')
df = data['地区'].value_counts()
df.values+10
# 画柱形图
plt.bar(df.index,df.values,color = 'r',edgecolor = 'k')
# 设置标题
plt.title('各地区酒店数量',fontsize = 20)
# 设置x轴标签
plt.xlabel('地区名',fontsize = 16)
# 设置y轴标签
plt.ylabel('数量',fontsize = 16)
# 设置坐标轴参数字体大小
plt.tick_params(labelsize = 16)
# 设置x轴参数方向
plt.xticks(rotation = 90)
# 画图
for x,y in zip(df.index,df.values):
    plt.text(x,y+1,y,ha = 'center',va = 'bottom',fontsize = 15)
plt.show()

在这里插入图片描述

直方图—酒店评分

df2 = data['评分']
plt.hist(df2,bins = 8,facecolor = 'r',edgecolor = 'k',alpha = 0.5)
plt.show()

在这里插入图片描述

散点图—评分和价格

d1 = data['评分']
d2 = data['价格']
# 画散点图
plt.scatter(d1,d2,marker = 'D',color = 'b', edgecolor = 'k', alpha = 0.5)
# 设置图形标题
plt.title('评分和价格散点图', fontsize = 20)
# 设置x轴标题
plt.xlabel('评分', fontsize = 15)
# 设置y轴标题
plt.ylabel('价格', fontsize = 15)
# 设置坐标轴参数字体大小
plt.tick_params(labelsize = 12)
plt.show()

在这里插入图片描述

箱线图—平均价格前5的地区评分

# 将价格按地区分组,求平均数
d4 = data['价格'].groupby(data['地区']).mean()
# 降序排列
d4 = d4.sort_values(ascending= False)
d4 = d4[:5]
# 获取平均价格前5的地区评分
v1 = data[data.地区 == '中西区']['评分']
v2 = data[data.地区 == '离岛']['评分']
v3 = data[data.地区 == '沙田']['评分']
v4 = data[data.地区 == '湾仔']['评分']
v5 = data[data.地区 == '东区']['评分']
# 画箱线图
plt.boxplot((v1, v2, v3, v4, v5),labels = ['中西区' ,'离岛',  '沙田', '湾仔', '东区'], patch_artist = True,
            boxprops = {'facecolor':'b','edgecolor':'k','alpha': 0.5}, 
            flierprops = {'markerfacecolor':'g','markeredgecolor':'r', 'marker': 'o'})
plt.tick_params(labelsize = 15)
# 设置x轴标题
plt.xlabel('地区',fontsize = 18)
# 设置y轴标题
plt.ylabel('评分', fontsize = 18)
# 设置图形标题
plt.title('地区评分箱线图',fontsize = 20)
plt.show()

在这里插入图片描述

饼图—各个价格等级占比

# 按等级计数
df1 = data['等级'].value_counts()
# 按索引排序
df1 = df1.sort_index()
m = df1.values
# 设置图形大小
plt.figure(figsize = (5,5))
patches,l_text,p_text = plt.pie(m, labels = ['A','B','C'],autopct = '%.2f %%')
# 文本设置
for i in p_text:
    i.set_size(14)
    i.set_color('w')
# 图注设置
for i in l_text:
    i.set_size(14)
    i.set_color('r')
plt.legend()
plt.show()

在这里插入图片描述

相关系数图—评分,评分人数和价格

df = data[['评分', '评分人数', '价格']]
result = pd.scatter_matrix(df,diagonal = 'kde', color = 'k')

在这里插入图片描述

result1 = pd.scatter_matrix(df,diagonal = 'hist', color = 'k')

在这里插入图片描述

气泡图—年代,评分和评分等级

data = pd.read_excel('movie_data3.xlsx')
# 年代不是整数,删除此行
data[data.年代 == '2008\u200e']
data.drop(15203, inplace = True)
# 先定义气泡大小,rank 函数将评分列进行大小分配,越大的值分配结果也越高(即气泡越大)
size = dat0['评分'].rank()
#  n 为倍数,用来调节气泡的大小
n = 1
# 定义图像大小
plt.figure(figsize = (8, 6))
# 定义一个字典,将颜色跟对应的分类进行绑定
color = {'A':'red', 'B':'blue','C':'orange', 'D':'yellow', 'E':'green'}
plt.scatter(dat0['年代'], dat0['评分'], color = [color[i] for i in dat0['评分等级']], s = size * n, alpha = 0.9)
# 设置x轴标题
plt.xlabel('年代', fontsize = 16)
# 设置y轴标题
plt.ylabel('评分', fontsize = 16)
# 设置坐标轴刻度字符大小
plt.tick_params(labelsize = 12)
plt.show()

在这里插入图片描述

雷达图—各个评分等级评分均值

# 使用ggplot的绘图风格
plt.style.use('ggplot')

# 计算各个评分等级的均值
mean = pd.pivot_table(data, values = '评分', index = '评分等级')
rate = mean['评分']
# 构造数据
values = rate.values
feature = rate.index
N = len(values)
# 设置雷达图的角度,用于平分切开一个圆面
angles = np.linspace(0, 2 * np.pi, N, endpoint=False)
# 为了使雷达图一圈封闭起来,需要下面的步骤
values = np.concatenate((values,[values[0]]))
angles = np.concatenate((angles,[angles[0]]))
# 绘图
plt.figure(figsize = (8,6))
# 这里一定要设置为极坐标格式
plt.subplot(111, polar=True)
# 绘制折线图
plt.plot(angles, values, 'b-', linewidth = 2)
# 填充颜色
plt.fill(angles, values,'b', alpha = 0.5)
# 添加每个特征的标签
plt.thetagrids(angles * 180/np.pi, feature)
# 设置雷达图的范围
plt.ylim(0,10)
# 添加标题
plt.title('各个评分等级评分均值')
# 添加网格线
plt.grid(True)
# 显示图形
plt.show()

在这里插入图片描述

热力图—评分和投票人数

# 删除错误数据
data[data.时长 == '8U']
data[data.时长 == '12J']
data.drop([31636, 32941], inplace = True)
import seaborn as sns
data1 = data[['年代', '产地', '名字', '投票人数', '类型', '上映时间', '时长', '评分', '首映地点', '评分等级',
       '热门程度']]
# 计算各个变量的相关系数
correction = data1.corr()
# 将相关系数取绝对值
correction = abs(correction)
# 定义图形大小
fig = plt.figure(figsize = (8,6))
# 定义每个图片大小
ax = fig.add_subplot(figsize = (20,20))
#  linewidths:定义热力图里“表示两两特征关系的矩阵小块”之间的间隔大小 
#  vmax,vmin:分别是热力图的颜色取值最大和最小范围,默认是根据data数据表里的取值确定 
#  annot(annotate的缩写):默认取值False;如果是True,在热力图每个方格写入数据;如果是矩阵,在热力图每个方格写入该矩阵对应位置数据 
#  annot_kws:默认取值False;如果是True,设置热力图矩阵上数字的大小颜色字体,matplotlib包text类下的字体设置;
ax = sns.heatmap(correction, linewidth = 0.05, vmax = 1, vmin = 0, annot = True, annot_kws = {'size': 18, 'weight': 'bold'})
# 设置x和y轴的字符大小
plt.xticks(fontsize = 12)
plt.yticks(fontsize = 12)
plt.show()

在这里插入图片描述

词云图—红楼梦

import jieba
from wordcloud import WordCloud
# 红楼梦人物出场统计
# 读取文本
f = open('F:\\二级python\\行文代码\\第10章\\红楼梦1.txt', encoding='gb18030', errors = 'ignore')
txt = f.read()
f.close()
# 进行精准分词
words = jieba.lcut(txt)
# 计算分次之后各个词语的数量
counts = {}
for word in words:
    if len(word)== 1:
        continue
    else:
        counts[word] = counts.get(word, 0) + 1
# 打印排名前十五的词语和数量
items = list(counts.items())
items.sort(key = lambda x :x[1], reverse = True)
for i in range(15):
    word, count = items[i]
    print('{0:<10}{1:>5}'.format(word, count))
# 排除与人物无关的关键词
excludes = {'什么', '一个', '我们', '那里', '你们', '如今', '说道', '知道',
           '老太太', '起来', '姑娘', '这里', '出来', '他们', '众人','自己', 
           '一面', '太太', '只见', '怎么', '奶奶', '两个', '没有', '不是',
           '不知', '这个', '听见'}
for word in excludes:
    del(counts[word])
### 做词云
from scipy.misc import imread
# 将生成词云设置为如下形状
mask = imread('爱丽丝.png')
# 将各个词连接起来
newtxt = ''.join(words)
#  画词云
wordcloud = WordCloud(background_color = 'white', width = 800, height = 600,font_path = 'msyh.ttc',max_words = 200, max_font_size = 80,stopwords = excludes, mask = mask).generate(newtxt)
# 保存为图片
wordcloud.to_file('红楼梦基本词云.png')

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_43196531/article/details/85160204