半个小时完成matplotlib入门(二)绘图

在这一篇章主要讲解用matplotlib工具包画各种图。

写在绘图前面

matplotlib对中文非常不友好,如果你的图像标题或者标签有中文,你就会发现中文部分变成了乱码,而且符号’-‘也会变成框框。’因此如果想解决这个问题,我们需要人工的导入字体或指定字体

Windows
from pylab import mpl
# 指定默认字体
mpl.rcParams['font.sans-serif'] = ['FangSong'] 
# 解决保存图像是负号'-'显示为方块的问题
mpl.rcParams['axes.unicode_minus'] = False 
Mac
import numpy as np
import matplotlib
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties
# 导入本地字体文件
font = FontProperties(fname='/Library/Fonts/Songti.ttc')
# Fixing random state for reproducibility
np.random.seed(19680801)
# 设置为FALSE 解决负号显示为框的问题
matplotlib.rcParams['axes.unicode_minus'] = False
fig, ax = plt.subplots()
ax.plot(10*np.random.randn(100), 10*np.random.randn(100), 'o')
# 用fontproperties参数设置字体为自定义字体
ax.set_title(u'散点图',fontproperties=font,fontsize=30)
plt.show()

画图

说完了,我们可以开始画图了

直方图

直方图的参数只有x!传入横坐标就行!构造函数:

plt.hist(x,bins,normed,color,orientation)
  • bins
    可以是一个bin数量的整数值,也可以是表示bin的一个序列。默认值为10,其实bins就是指定画出的直方图有几个直方
  • normed
    如果值为True,直方图的值将进行归一化处理,形成概率密度,默认值为False。所谓概率密度就是把横坐标发生的数量转换成发生的概率
  • color
    指定直方图的颜色,如果指定多个颜色,直方图颜色序列会设置成相同的顺序,如果没指定颜色就会使用默认颜色。
  • orientation
    通过设置orientation为horizontal创建水平直方图。默认值为vertical
例如我们想画一个0到100内随机数分布的概率的水平直方图:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
x=np.random.randint(0,100,size=100)
plt.hist(x,bins=50,normed= True,color='c',orientation='horizontal')
plt.show()

在这里插入图片描述

条形图

构造函数:

plt.bar(x,y,width,height)
  • x就是横坐标的标签
  • width是纵向设置条形宽度,取值0—1
  • height 横向设置条形高度
    在这里插入图片描述

饼图

饼图只有一个参数x!构造函数

plt.pie(x)

参数解释:

  • labels参数设置每一块的标签;
  • labeldistance参数设置标签距离圆心的距离(比例值,只能设置一个浮点小数)
  • autopct参数设置比例值的显示格式(%1.1f%%);
  • pctdistance参数设置比例值文字距离圆心的距离
  • explode参数设置每一块顶点距圆形的长度(比例值,列表);
  • colors参数设置每一块的颜色(列表);
  • shadow参数为布尔值,设置是否绘制阴影
  • startangle参数设置饼图起始角度
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
#搞定中文字体
from pylab import mpl
plt.rcParams['font.sans-serif'] =['Microsoft YaHei']
plt.rcParams['axes.unicode_minus'] = False
x=[0.25,0.25,0.5]
plt.pie(x,labels=['男','女','阴阳人'],labeldistance=0.5,pctdistance=0.8,
                  colors=['b','c','y'],startangle=90)
plt.title('微博网民性别分布')
plt.show()

在这里插入图片描述

散点图

接受参数为x,y,x不是x轴刻度而是每个点的横坐标,构造函数:

plt.scatter(x,y,marker=,c=)
  • marker指定散点的形状
  • c指定散点的颜色
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
#搞定中文字体
from pylab import mpl
plt.rcParams['font.sans-serif'] =['Microsoft YaHei']
plt.rcParams['axes.unicode_minus'] = False
x=np.random.randint(0,10,20)
y=np.random.randint(0,10,20)
plt.scatter(x,y,marker='+',c='r')
plt.show()

在这里插入图片描述

玫瑰图

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
#搞定中文字体
from pylab import mpl
plt.rcParams['font.sans-serif'] =['Microsoft YaHei']
plt.rcParams['axes.unicode_minus'] = False
x=[1,2,3,4,5,6]
plt.axes(polar=True)#这是关键
plt.bar(['a','b','c','d','e','e'],x)
plt.show()

在这里插入图片描述

注释

图形内文字注释

plt.text(x=,y=,s=)
  • x,y表示注释所在的坐标位置
  • s是注释内容
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
#搞定中文字体
from pylab import mpl
plt.rcParams['font.sans-serif'] =['Microsoft YaHei']
plt.rcParams['axes.unicode_minus'] = False
x=np.linspace(0,2*np.pi,20)
plt.plot(x,np.sin(x),'c-.')
plt.xticks([0,np.pi/2,np.pi,np.pi*3/2,np.pi*2],['0','π/2','π','3π/2','2π'])
plt.text(x=np.pi/2,y=1,s='wdnmd')
plt.show()

在这里插入图片描述

高级注释

annotate() 

参数解释:

  • s注释文字
  • xy参数设置箭头指示的位置
  • xytext参数设置注释文字的位置
  • arrowprops参数以字典的形式设置箭头的样式
  • width参数设置箭头长方形部分的宽度
  • headlength参数设置箭头尖端的长度,
  • headwidth参数设置箭头尖端底部的宽度
  • shrink参数设置箭头顶点、尾部与指示点、注释文字的距离(比例值),可以理解为控制箭头的长度
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
#搞定中文字体
from pylab import mpl
plt.rcParams['font.sans-serif'] =['Microsoft YaHei']
plt.rcParams['axes.unicode_minus'] = False
x=np.linspace(0,2*np.pi,20)
plt.plot(x,np.sin(x),'c-.')
plt.xticks([0,np.pi/2,np.pi,np.pi*3/2,np.pi*2],['0','π/2','π','3π/2','2π'])
a=plt.subplot(111)
a.annotate(s='老八秘制小憨堡',xy=(np.pi/2,1),xytext=(np.pi*2/3,1),arrowprops={'width':3,
                 'headlength':10,'headwidth':8, 'shrink':1})
plt.show()

在这里插入图片描述

君问归期未有期

发布了36 篇原创文章 · 获赞 75 · 访问量 7047

猜你喜欢

转载自blog.csdn.net/weixin_45939019/article/details/104221600
今日推荐