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))
七.总结