python数据分析008_Matplotlib绘柱图,饼图,散点图

一.柱状图

  1.plt.bar(x,height,width,color)

  • x:记录x轴上的标签
  • height:记录每个柱形的高度
  • width:设置柱形的宽度
  • color:设置柱形的颜色,传入颜色值的列表,例如:['blue','green','red']

  2.使用plt.text( )函数把柱形的高度数据标注在了柱形的上方:    plt.text(x,y,s,ha,va)

  函数中前两个参数分别为标注数据的坐标,x和y坐标,参数s记录标注的内容,参数ha和va分别用于设置水平和垂直方向的对齐方式。

  • # 绘制柱状图
  • rects = plt.bar(a,b,width=0.3,color=['red','green','blue','cyan','yellow','gray'])
  • plt.xticks(a,fontproperties=my_font)
  • plt.yticks(range(0,41,5),range(0,41,5))
  • # 在条形图上加标注(水平居中)
  • for rect in rects:
  • height = rect.get_height()
  • plt.text(rect.get_x() + rect.get_width() / 2, height+0.3, str(height),ha="center")
  • plt.show()

二.直方图

  1.plt.hist(data, bins, facecolor, edgecolor)

  • data:绘图用到的数据
  • height:直方图的条形数目
  • bins:设置柱形的宽度
  • facecolor:矩形的填充颜色
  • edgecolor:条形的边框颜色

例如:

  • from matplotlib import pyplot as plt
  • from matplotlib import font_manager
  • time = [131, 116, 111, 84, 137, 115, 122, 106, 144, 109, 123, 116, 111,111, 133, 150]
  • my_font = font_manager.FontProperties(fname='/data/course_data/data_analysis/STSONG.TTF',size=10)
  • # 2)创建画布
  • plt.figure(figsize=(20, 8), dpi=100)
  • # 3)绘制直方图
  • # 设置组距
  • distance = 2
  • # 计算组数
  • group_num = int((max(time) - min(time)) / distance)
  • # 绘制直方图
  • plt.hist(time, bins=group_num)
  • # 修改x轴刻度显示
  • plt.xticks(range(min(time), max(time))[::2])
  • # 添加网格显示
  • plt.grid(linestyle="--", alpha=0.5)
  • # 添加x, y轴描述信息
  • plt.xlabel("电影时长大小",fontproperties=my_font)
  • plt.ylabel("电影的数据量",fontproperties=my_font)

三.散点图

  1.plt.scatter(x,y,s,c,marker,alpha,linewidths)

  • x,y:数组
  • s:散点图中点的大小,可选
  • c:散点图中点的颜色,可选
  • marker:散点图的形状,可选
  • alpha:表示透明度,在 0~1 取值,可选
  • linewidths:表示线条粗细,可选

例如:

  • import pandas as pd
  • from matplotlib import pyplot as plt
  • df = pd.read_csv('/data/course_data/data_analysis/height_weight.csv')
  • # 设置图形大小
  • plt.figure(figsize=(20,8),dpi=80)
  • # 使用scatter绘制散点图
  • plt.scatter(df['height'],df['weight'],alpha=0.5,c='red')
  • plt.show()

四.饼图

  1.plt.pie(x, labels, autopct, shadow, startangle)

  • x:绘制用到的数据
  • Tlabels:用于设置饼图中每一个扇形外侧的显示说明文字
  • autopct:设置饼图内百分比数据,可以使用format字符串或者format function,例如’%.1f%%’指小数点后保留1位小数
  • shadow:表示是否在饼图下面画阴影,默认值:False,即不画阴影
  • Tstartangle:设置起始绘制角度,默认图是从x轴正方向逆时针画起,如果设定startangle=90,则从y轴正方向画起

例如:

  • import pandas as pd
  • from matplotlib import pyplot as plt
  • from matplotlib import font_manager
  • my_font = font_manager.FontProperties(fname='/data/course_data/data_analysis/STSONG.TTF',size=10)
  • df = pd.read_excel('/data/course_data/data_analysis/lagou.xlsx')
  • plt.figure(figsize = (10,8))
  • num = df.groupby('学历').size()
  • # 绘制饼图
  • patches, l_text, p_text = plt.pie(num,labels = num.index, autopct='%.1f%%',shadow=False,startangle=90)
  • for t in l_text:
  • t.set_fontproperties(my_font)
  • plt.show()

plt.pie()会有三个返回值

  • patches: matplotlib.patches.Wedge列表(扇形实例)
  • l_text:label matplotlib.text.Text列表(标签实例)
  • p_text:label matplotlib.text.Text列表(百分比标签实例)

所以,在每一个扇形外侧显示中文的时候,需要获取到每一个标签实例,然后通过set_fontproperties()方法设置自定义字体。

五.总结

 六.绘制双Y轴坐标系

  1.双y轴绘制的关键函数:twinx()

  • fig = plt.figure(figsize=(20,8),dpi=80)
  • ax = fig.add_subplot(111)
  • lin1 = ax.plot(feb_datas.index.strftime('%Y-%m-%d').tolist(),feb_datas['开盘价(元)'].values.tolist(),label='开盘价',color='red')
  • ax.set_ylabel("开盘价(元)",fontproperties=my_font)
  • ax.set_xlabel("日期",fontproperties=my_font)
  • ax.legend(prop=my_font)
  • ax2 = ax.twinx()
  • lin2 = ax2.plot(feb_datas.index.strftime('%Y-%m-%d').tolist(),feb_datas['成交量(股)'].values.tolist(),label='成交量(股)')
  • ax2.legend(prop=my_font)
  • ax2.set_ylabel("成交量(股)",fontproperties=my_font)

  2.合并图例

  • # 合并图例
  • lns = lin1+lin2
  • labs = [l.get_label() for l in lns]
  • ax.legend(lns, labs, prop=my_font)

  3.Matplotlib在绘制图形的时候会默认显示上面和右侧的边框,以及坐标轴的颜色默认是黑色。如果想要去掉默认的边框,通过plt.gca()获得当前的Axes对象。使用spines属性获取到对应的边框。

  •  ax = plt.gca()
  • ax.spines['right']
  • right右边框、left左边框、top上边框、bottom下边框。

  4.通过set_color('none')方法可以设置边框的颜色。

  • ax.spines['right'].set_color('none')
  • none表示无色,也可以用red、blue等样式的英语单词或者是十六进制的颜色值#0000FF。

  5.如果想要X轴的0点,和Y轴的0点交叉,需要使用set_position方法移动坐标轴的位置。

  • ax.spines['bottom'].set_position(('data', 0))
  • ax.spines['left'].set_position(('data', 0))

七.总结

 

posted @ 2020-05-21 17:13  番薯大大  阅读(665)  评论(0编辑  收藏  举报