当前位置:   article > 正文

Python数据分析-matplotlib_plt.figure(7, figsize=(10, 6))

plt.figure(7, figsize=(10, 6))

目录

一、折线图:plt.plot()

1.1 plt.plot()基本用法

1.2 设置坐标轴范围:plt.axis([xmin,xmax,ymin,ymax])

1.3 plt.plot()绘制多个图形

1.4 linewidth设置线条宽度

1.5 使用plt.plot()的返回值设置线条属性

1.6 plt.setp()修改线条性质

1.7 对特殊点做标记

 ​编辑

二、子图:plt.subplot()

三、柱状图:plt.bar()

3.1 柱状图基本操作

3.2 添加其他属性

四、饼图:plt.pie()

4.1 饼图基本操作

4.2 添加其他属性

五、频率分布直方图:plt.hist()

5.1 直方图基本操作

5.2 添加其他属性

5.3 绘制双轴图

六、散点图:plt.scatter()

七、箱线图:plt.boxplot()

7.1 箱线图基本操作

7.2 添加其他属性

7.3 绘制多组数据的箱线图

八、相关系数矩阵图-热力图

8.1 相关系数矩阵图:pd.plotting.scatter_matrix()

8.2 seaborn库画热力图:sns.heatmap()


一、折线图:plt.plot()

1.1 plt.plot()基本用法

  1. import matplotlib.pyplot as plt #导入相关的包
  2. import numpy as np
  3. import pandas as pd
  4. plt.plot([1,2,3,4])# 若只给入一个列表则会被当成y值,x值为0,1,2,3
  5. plt.ylabel('y') # x轴的名字
  6. plt.xlabel('x') # y轴的名字

  1. plt.plot([1,2,3,4],[1,4,9,16]) # 若传入两个列表则第一个为x,第二个列表为y
  2. # 默认情况下,matplotlib.pyplot 不会直接显示图像,只有调⽤ plt.show()函数时,图像才会显示出来
  3. plt.show()

 还可以指定折线的类型和颜色:

 以折现颜色为蓝色,类型为圆点为例:

  1. plt.plot([1,2,3,4],[1,4,9,16],'bo') #'b'蓝色 'o'圆点
  2. plt.show()

1.2 设置坐标轴范围:plt.axis([xmin,xmax,ymin,ymax])

  1. plt.plot([1,2,3,4],[1,4,9,16],'g*')
  2. plt.axis([0,6,0,20]) # 设置坐标轴范围,x轴0-6,y轴0-20
  3. plt.show()

1.3 plt.plot()绘制多个图形

  1. t=np.arange(0,5,0.2)
  2. plt.plot(t,t,'r--',t,t**2,'bs',t,t**3,'g^')
  3. plt.show()

1.4 linewidth设置线条宽度

  1. x=np.linspace(-np.pi,np.pi)
  2. y=np.sin(x)
  3. plt.plot(x,y,linewidth=1.0,color='r') # 通过关键字指定线条宽度,颜色
  4. plt.show()

1.5 使用plt.plot()的返回值设置线条属性

  1. line1,line2=plt.plot(x,y,'r-',x,y+1,'g-')#返回给两个变量,若前面是一个变量,将会给这个变量返回一个列表,而我们无法对列表进行操作
  2. line1.set_antialiased(False)#对line1去掉抗锯齿
  3. plt.show()

1.6 plt.setp()修改线条性质

  1. line=plt.plot(x,y)
  2. plt.setp(line,color='g',linewidth=4)

1.7 对特殊点做标记

  1. import warnings
  2. warnings.filterwarnings('ignore')#对警告进行忽略
  3. import matplotlib.pyplot as plt
  4. import numpy as np
  5. import pandas as pd
  6. plt.rcParams['font.sans-serif']=['SimHei']#字体设置为黑体,若不设置将无法显示中文
  7. plt.rcParams['axes.unicode_minus']=False #可以显示负号
  8. df=pd.read_excel('movie_data3.xlsx')
  9. data=df['年代'].value_counts()
  10. data=data.sort_index()[:-3] # 对index排序
  11. data # 查看数据
  12. x=data.index
  13. y=data.values
  14. plt.plot(x,y,color='b')
  15. plt.title('每年的电影数量',fontsize=20) # 添加图像标题并设置标题大小
  16. plt.xlabel('年代',fontsize=18) # 添加x轴标题
  17. plt.ylabel('电影数量',fontsize=18)
  18. plt.show()

1888       2
1890       1
1892       1
1894       3
1895       8
        ... 
2011    1845
2012    2018
2013    1977
2014    1867
2015    1569
Name: 年代, Length: 125, dtype: int64

 

对特殊点做标记:

  1. x=data.index
  2. y=data.values
  3. plt.figure(figsize=(10,6))
  4. plt.plot(x,y,color='b')
  5. plt.title('每年的电影数量',fontsize=20)
  6. plt.xlabel('年代',fontsize=18)
  7. plt.ylabel('电影数量',fontsize=18)
  8. #每隔十年显示数字,初始值为1888
  9. for a,b in zip(x[::10],y[::10]):
  10. plt.text(a,b+10,b,ha='center',va='bottom',fontsize=12)
  11. #标记特殊点
  12. plt.annotate('2012年达到最大值',xy=(2012,data[2012]),xytext=(2022,2100),arrowprops=dict(facecolor='black',edgecolor='red'))
  13. # '2012年达到最大值':要填充的文本 ,xy=(2012,data[2012]):要标记的坐标点(箭头尖端的位置) xytext=(2025,2100):箭头末端的位置
  14. # arrowprops=dict(facecolor='black',edgecolor='red'):箭头的填充色和边框的颜色
  15. plt.text(1980,1000,'电影数量开始快速增长')# 在指定位置放入文字,在坐标(1980,1000,)写电影数量开始快速增长
  16. plt.show()

 

二、子图:plt.subplot()

plt.figure(figsize = (x,y)):生成x*y的图像

plt.subplot(x,y,z):生成x行y列的图像,将该图形放置在第z个图像上

  1. def f(t):
  2. return np.exp(-t)*np.cos(2*np.pi*t)
  3. t1=np.arange(0.0,5.0,0.1)
  4. t2=np.arange(0.0,5.0,0.02)
  5. plt.figure(figsize=(10,4)) # 生成10*4的图像
  6. plt.subplot(2,1,1) # 生成两行一列的子图,将第一个图形放在第一个图像上
  7. plt.plot(t1,f(t1),'bo',t2,f(t2),'k') # 绘制第一个图形
  8. plt.subplot(2,1,2) # 将第二个图形放在第二个图像上
  9. plt.plot(t2,np.cos(2*np.pi*t2),'r--') # 绘制第二个图形

  1. def f(t):
  2. return np.exp(-t)*np.cos(2*np.pi*t)
  3. t1=np.arange(0.0,5.0,0.1)
  4. t2=np.arange(0.0,5.0,0.02)
  5. plt.figure(figsize=(10,4)) # 生成10*4的图像
  6. plt.subplot(2,2,1) # 生成两行一列的子图,将第一个图形放在第一个图像上
  7. plt.plot(t1,f(t1),'bo',t2,f(t2),'k') # 绘制第一个图形
  8. plt.subplot(2,2,2) # 将第二个图形放在第二个图像上
  9. plt.plot(t2,np.cos(2*np.pi*t2),'r--') # 绘制第二个图形
  10. plt.subplot(2,2,3) # 将第三个图形放在第三个图像上
  11. plt.plot(t1,f(t1),'bo',t2,f(t2),'k') # 绘制第三个图形
  12. plt.subplot(2,2,4) # 将第四个图形放在第四个图像上
  13. plt.plot(t2,np.cos(2*np.pi*t2),'r--') # 绘制第四个图形

三、柱状图:plt.bar()

3.1 柱状图基本操作

以绘制各个国家的电影数量的柱状图为例:

首先导入数据:

  1. import warnings
  2. warnings.filterwarnings('ignore')#对警告进行忽略
  3. import matplotlib.pyplot as plt
  4. import numpy as np
  5. import pandas as pd
  6. plt.rcParams['font.sans-serif']=['SimHei']#字体设置为黑体,若不设置将无法显示中文
  7. plt.rcParams['axes.unicode_minus']=False #可以显示负号
  8. df=pd.read_excel('movie_data3.xlsx') # 导入数据集
  9. df[:5]看前五行的数据情况

然后取出要绘制成柱状图的数据:

  1. data=df['产地'].value_counts()
  2. data

接着绘制图形

  1. x=data.index
  2. y=data.values
  3. plt.figure(figsize=(15,6)) # 图像大小为15*6
  4. plt.bar(x,y,color='g')
  5. plt.show()

 完整代码为:

  1. import warnings
  2. warnings.filterwarnings('ignore')#对警告进行忽略
  3. import matplotlib.pyplot as plt
  4. import numpy as np
  5. import pandas as pd
  6. plt.rcParams['font.sans-serif']=['SimHei']#字体设置为黑体,若不设置将无法显示中文
  7. plt.rcParams['axes.unicode_minus']=False #可以显示负号
  8. df=pd.read_excel('movie_data3.xlsx') # 导入数据集
  9. df[:5] # 查看数据集的前五行
  10. data=df['产地'].value_counts() # 提取出需要的数据
  11. data # 查看提取出的数据
  12. # 绘制柱状图
  13. x=data.index
  14. y=data.values
  15. plt.figure(figsize=(15,6))
  16. plt.bar(x,y,color='g')
  17. plt.show()

3.2 添加其他属性

  1. x=data.index
  2. y=data.values
  3. plt.figure(figsize=(20,6))
  4. plt.bar(x,y,color='g')
  5. #加入标题
  6. plt.title('各个国家或地区电影数量',fontsize=20)# fontsize:图表标题字体大小设置
  7. plt.xlabel('国家或地区',fontsize=18)# 坐标轴标题字体大小设置
  8. plt.ylabel('电影数量',fontsize=18)
  9. plt.tick_params(labelsize=14) # 设置y轴字体大小
  10. plt.xticks(rotation=90) # 将x轴字体旋转90°
  11. # 'edge':将数据标签放在柱子的顶端; 'center':将数据标签放在柱子的中间
  12. plt.bar_label(p,label_type = 'edge')
  13. # 将数据标签放在柱子的中间也可如下操作:
  14. # for a,b in zip(x,y):
  15. # plt.text(a,b+10,b,ha='center',va='bottom',fontsize=10)
  16. # #a,b+10为要放置的位置,b为要放置的数字,center为将数字居中,bottom是将数字放在柱子的顶端
  17. plt.show()

四、饼图:plt.pie()

根据电影的时长绘制柱状图

4.1 饼图基本操作

  1. import warnings
  2. warnings.filterwarnings('ignore')#对警告进行忽略
  3. import matplotlib.pyplot as plt
  4. import numpy as np
  5. import pandas as pd
  6. plt.rcParams['font.sans-serif']=['SimHei']#字体设置为黑体,若不设置将无法显示中文
  7. plt.rcParams['axes.unicode_minus']=False #可以显示负号
  8. df=pd.read_excel('movie_data3.xlsx')
  9. # 因为这里的数据是连续的,需要对其作离散处理
  10. data=pd.cut(df['时长'],[0,60,90,110,1000]).value_counts()#区间为0-60,60-90.....(做开右闭)
  11. data
  12. y=data.values #饼图会自动进行归一化
  13. plt.figure(figsize=(3,3))
  14. plt.title('电影时长占比',fontsize=15)
  15. plt.pie(y,labels=data.index,colors='bygr',autopct='%.2f%%')#labels:每个区间的名字 autopct:添加保留两位小数的标签
  16. plt.show()

4.2 添加其他属性

添加图例,设置从y轴正向开始

  1. y=data.values
  2. y=y/sum(y)
  3. plt.figure(figsize=(3,3))
  4. plt.title('电影时长占比',fontsize=15)
  5. plt.pie(y,labels=data.index,colors='bygr',autopct='%.1f%%',startangle=90)#startangle设置是从y轴正向开始
  6. plt.legend()# 绘制图例
  7. plt.show()

 

 

设置饼图外部字体颜色和内部颜色字体:

  1. y=data.values
  2. #饼图会自动进行归一化
  3. #y=y/sum(y)
  4. plt.figure(figsize=(6,6))
  5. plt.title('电影时长占比',fontsize=15)
  6. patches,l_text,p_text=plt.pie(y,labels=data.index,colors='bygr',autopct='%.1f%%',startangle=90)
  7. # l_text,p_text:饼图外部字体颜色和饼图内部颜色字体设置
  8. for i in p_text:
  9. i.set_size(15)#内部字体15号字体
  10. i.set_color('w')#白色
  11. for i in l_text:
  12. i.set_size(15)
  13. i.set_color('r')
  14. plt.legend()
  15. plt.show()

五、频率分布直方图:plt.hist()

根据电影评分绘制频率分布直方图

5.1 直方图基本操作

  1. import warnings
  2. warnings.filterwarnings('ignore')#对警告进行忽略
  3. import matplotlib.pyplot as plt
  4. import numpy as np
  5. import pandas as pd
  6. plt.rcParams['font.sans-serif']=['SimHei']#字体设置为黑体,若不设置将无法显示中文
  7. plt.rcParams['axes.unicode_minus']=False #可以显示负号
  8. df=pd.read_excel('movie_data3.xlsx') # 导入数据
  9. plt.figure(figsize=(10,6)) 设置图像比例
  10. plt.hist(df['评分'],bins=20)
  11. plt.show()

5.2 添加其他属性

  1. plt.figure(figsize=(10,6))
  2. plt.hist(df['评分'],bins=20,edgecolor='black',alpha=0.5)
  3. plt.show()

5.3 绘制双轴图

绘制电影评分的双轴图

  1. import numpy as np
  2. import pandas as pd
  3. import matplotlib.pyplot as plt
  4. import matplotlib.mlab as mlab
  5. from scipy.stats import norm
  6. import warnings
  7. warnings.filterwarnings('ignore')#不报警告
  8. plt.rcParams['font.sans-serif']=['SimHei']#设置字体为黑体
  9. plt.rcParams['axes.unicode_minus']=False#设置负号能够正常显示
  10. df=pd.read_excel('movie_data3.xlsx')
  11. fig=plt.figure(figsize=(5,4))
  12. ax1=fig.add_subplot(111) #一行一列第一个图
  13. n,bins,patches=ax1.hist(df['评分'],bins=100,color='m')
  14. ax1.set_ylabel('电影数量',fontsize=15)
  15. ax1.set_xlabel('评分',fontsize=15)
  16. ax1.set_title('频率分布直方图',fontsize=20)
  17. y=norm.pdf(bins,df['评分'].mean(),df['评分'].std())
  18. ax2=ax1.twinx()
  19. ax2.plot(bins,y,'b--')
  20. ax2.set_ylabel('概率分布',fontsize=15)
  21. plt.show()

六、散点图:plt.scatter()

绘制电影时长和评分的散点图:

  1. import warnings
  2. warnings.filterwarnings('ignore')#对警告进行忽略
  3. import matplotlib.pyplot as plt
  4. import numpy as np
  5. import pandas as pd
  6. plt.rcParams['font.sans-serif']=['SimHei']#字体设置为黑体,若不设置将无法显示中文
  7. plt.rcParams['axes.unicode_minus']=False #可以显示负号
  8. df=pd.read_excel('movie_data3.xlsx')
  9. x=df['时长']
  10. y=df['评分']
  11. plt.figure(figsize=(10,8))
  12. plt.scatter(x,y) # 散点图绘制函数
  13. plt.legend() # 图例
  14. plt.title('电影时长与评分散点图',fontsize=20)
  15. plt.xlabel('时长',fontsize=18) # x轴标题
  16. plt.ylabel('评分',fontsize=18)
  17. plt.show()

 选择原有数据的百分之一进行绘图:

  1. #选择原有数据的百分之一
  2. x=df['时长'][::100]
  3. y=df['评分'][::100]
  4. plt.figure(figsize=(10,6))
  5. plt.scatter(x,y,color = 'c',marker = 'd')
  6. plt.title('电影时长与评分散点图',fontsize=20)
  7. plt.xlabel('时长',fontsize=18)
  8. plt.ylabel('评分',fontsize=18)
  9. plt.show()

七、箱线图:plt.boxplot()

 

绘制美国电影评分的箱线图:

7.1 箱线图基本操作

  1. import numpy as np
  2. import pandas as pd
  3. import matplotlib.pyplot as plt
  4. import warnings
  5. warnings.filterwarnings('ignore')#不报警告
  6. plt.rcParams['font.sans-serif']=['SimHei']#设置字体为黑体
  7. plt.rcParams['axes.unicode_minus']=False#设置负号能够正常显示
  8. df=pd.read_excel('movie_data3.xlsx')
  9. data=df[df.产地=='美国']['评分'] # 产地为美国的电影评分数据
  10. plt.figure(figsize=(5,4))
  11. plt.boxplot(data,whis=2)
  12. plt.title('美国电影评分',fontsize=15)
  13. plt.show()

 

7.2 添加其他属性

  1. data=df[df.产地=='美国']['评分']
  2. plt.figure(figsize=(5,3))
  3. plt.boxplot(data,whis=2,flierprops={'marker':'o','markerfacecolor':'r','color':'k'}
  4. ,patch_artist = True,boxprops = {'color':'b','facecolor':'#9999ff'})
  5. #flierprops:设置异常值的形状为圆圈,填充色为红色,边框为黑色
  6. #patch_artist = true表示可以对箱体的颜色进行修改 boxprops:color修改箱体边框颜色,facecolor修改箱体颜色
  7. plt.title('美国电影评分',fontsize=20)
  8. plt.grid() # 设置网格线
  9. plt.show()

7.3 绘制多组数据的箱线图

  1. data1=df[df.产地=='中国大陆']['评分']
  2. data2=df[df.产地=='中国香港']['评分']
  3. data3=df[df.产地=='日本']['评分']
  4. data4=df[df.产地=='英国']['评分']
  5. data5=df[df.产地=='法国']['评分']
  6. plt.figure(figsize=(8,5))
  7. plt.boxplot([data1,data2,data3,data4,data5],labels=['中国大陆','中国香港','日本','英国','法国'],whis=2,vert=False) # vert:旋转图形
  8. plt.title('电影评分箱线图',fontsize=20)
  9. ax = plt.gca()
  10. ax.patch.set_facecolor('gray') # 背景色调为灰色
  11. ax.patch.set_alpha(0.3) # 调整背景透明度
  12. plt.grid() # 设置网格线
  13. plt.show()

八、相关系数矩阵图-热力图

8.1 相关系数矩阵图:pd.plotting.scatter_matrix()

① 主对角线为核密度估计的情况:diagonal='kde'

  1. import warnings
  2. warnings.filterwarnings('ignore')#对警告进行忽略
  3. import matplotlib.pyplot as plt
  4. import numpy as np
  5. import pandas as pd
  6. plt.rcParams['font.sans-serif']=['SimHei']#字体设置为黑体,若不设置将无法显示中文
  7. plt.rcParams['axes.unicode_minus']=False #可以显示负号
  8. df=pd.read_excel('movie_data3.xlsx')
  9. data=df[['投票人数','评分','时长']]
  10. data[:5] # 查看前五行
  11. result=pd.plotting.scatter_matrix(data,diagonal='kde',color='k',alpha=0.3,figsize=(10,10))# diagonal='kde':主对角线为核密度估计

① 主对角线为直方图的情况:diagonal='hist'

result=pd.plotting.scatter_matrix(data[::100],diagonal='hist',color='k',alpha=0.3,figsize=(10,10)) # 主对角线为直方图

8.2 seaborn库画热力图:sns.heatmap()

  1. import seaborn as sns
  2. corr=data.corr()
  3. corr=abs(corr) #求绝对值,让后续绘制的图不存在正负相关
  4. fig=plt.figure(figsize=(5,4))
  5. ax=fig.add_subplot()
  6. ax=sns.heatmap(corr,vmax=1,vmin=0,annot=True)#vmax,vmin设置热力图范围 annot=True:显示每个格子上的参数
  7. plt.xticks(fontsize=15)
  8. plt.yticks(fontsize=15)
  9. plt.show()

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/426572
推荐阅读
相关标签
  

闽ICP备14008679号