目录
一、数据源
二、实现的代码
三、结果展示
四、拓展知识
1.绘图标记
1.2线类型:
1.3颜色类型:
标记大小与颜色
1.4线的类型
1.5线的颜色
1.6标题与标签的定位
1.7Matplotlib 网格线
一、数据源
![](https://img-blog.csdnimg.cn/286d238dd102420bb1f95a44d680e0f7.png)
二、实现的代码
#导入库
import pandas as pd
import matplotlib.pyplot as plt
#自定义函数
def plot_combination():
sale = pd.read_excel('./人均教育支出.xlsx', header=0, index_col=0)
# 设置正常显示中文标签
plt.rcParams['font.sans-serif'] = ['SimHei']
# 正常显示负号
plt.rcParams['axes.unicode_minus'] = False
# 设置字体大小
plt.rcParams.update({'font.size': 16})
# 提取数据
x = sale['年份']
y1 = sale['城镇']
y2 = sale['农村']
y3= sale['占比']
plt.figure(figsize=(16, 8))
plt.subplot(111)
# 柱形宽度
bar_width = 0.35
# 在主坐标轴绘制柱形图
plt.bar(x, y1, bar_width,color='r', label='城镇')
plt.bar(x + bar_width, y2, bar_width,color='#FFFF00', label='农村')
# 设置坐标轴的取值范围,避免柱子过高而与图例重叠
plt.ylim(0, max(y1.max(), y2.max()) * 1.2)
# 设置图例
plt.legend(loc='upper left')
plt.ylabel("单位:元",fontsize=20, loc="center")
# 设置横坐标的标签
plt.xticks(x)
#plt.set_xticklabels(sale.index)
plt.xlabel("年份",fontsize=20, loc="center")
# 在次坐标轴上绘制折线图
plt.twinx()
# ls:线的类型,lw:宽度
plt.plot(x, y3, ls='--', lw=2, color='c', marker='d',ms = 20, mfc = 'm', label='农村与城镇的消费占比')
# 设置次坐标轴的取值范围,避免折线图波动过大,这里默认显示
plt.ylim()
# 设置图例
plt.legend(loc='upper center')
# 定义显示百分号的函数
def to_percent(number, position=0):
return '%.f' % (number*100) + '%'
# 次坐标轴的标签显示百分号 FuncFormatter:自定义格式函数包
from matplotlib.ticker import FuncFormatter
plt.gca().yaxis.set_major_formatter(FuncFormatter(to_percent))
# 设置标题
plt.title('\n人均教育支出占比\n', fontsize=26, loc='center', color='k')
plt.ylabel("单位:%",fontsize=20, loc="center")
#保存图片
plt.savefig('./figure.jpg', bbox_inches='tight')
plt.show()
if __name__ == '__main__':
plot_combination()
三、结果展示
![](https://img-blog.csdnimg.cn/6eb60f5ecea94af188781030ea7a0b6f.png)
四、拓展知识
1.绘图标记
marker 可以定义的符号如下:
标记符号描述"." ![](https://img-blog.csdnimg.cn/img_convert/1fc8f6886b920899ca5dfd3840a94e20.png) 点"," ![](https://img-blog.csdnimg.cn/img_convert/32f207f94e3237ab82404486cd733da7.png) 像素点"o" ![](https://img-blog.csdnimg.cn/img_convert/66885f5385939403db8a213a527c190e.png) 实心圆"v" ![](https://img-blog.csdnimg.cn/img_convert/f80a399470a347fd7d3311af77943a59.png) 下三角"^" ![](https://img-blog.csdnimg.cn/img_convert/e192369016b3ed56dbe2f4048dd57d7f.png) 上三角"" ![](https://img-blog.csdnimg.cn/img_convert/21685891c714a3546caced6bbf240694.png) 右三角"1" ![](https://img-blog.csdnimg.cn/img_convert/f2154dcd311a8103a3f96bca104b143d.png) 下三叉"2" ![](https://img-blog.csdnimg.cn/img_convert/48590cd3fe767b42efbbf275fc7e3c22.png) 上三叉"3" ![](https://img-blog.csdnimg.cn/img_convert/ab7e15da3abe597b2ae0e51e561cf911.png) 左三叉"4" ![](https://img-blog.csdnimg.cn/img_convert/177da62f4a7d37815058c5c1bec779e3.png) 右三叉"8" ![](https://img-blog.csdnimg.cn/img_convert/fc898373887f2358d7163bb42e66f1d1.png) 八角形"s" ![](https://img-blog.csdnimg.cn/img_convert/73502d84d1cf10ae1c8c5ba645b2ba16.png) 正方形"p" ![](https://img-blog.csdnimg.cn/img_convert/94f8e78e9937dc13f170168ff312f70e.png) 五边形"P" ![](https://img-blog.csdnimg.cn/img_convert/c4daac6f153375ada8f43d75ccb80f2f.png) 加号(填充)"*" ![](https://img-blog.csdnimg.cn/img_convert/c4e814dd554866072950e122e14461df.png) 星号"h" ![](https://img-blog.csdnimg.cn/img_convert/7f56a3f1fdf67b751e437e0acd02d2cd.png) 六边形 1"H" ![](https://img-blog.csdnimg.cn/img_convert/95c16bed26838b69265a34f679876dc1.png) 六边形 2"+" ![](https://img-blog.csdnimg.cn/img_convert/220e873b81426a8bb9aa28d242c09513.png) 加号"x" ![](https://img-blog.csdnimg.cn/img_convert/92d79e160eae5a440163693f2800faee.png) 乘号 x"X" ![](https://img-blog.csdnimg.cn/img_convert/783181e9c6d708710d1f37d60783fde3.png) 乘号 x (填充)"D" ![](https://img-blog.csdnimg.cn/img_convert/d78a0e14ad29be292836d1eb31a5dc07.png) 菱形"d" ![](https://img-blog.csdnimg.cn/img_convert/e03f11327eb22f0aa28b3728dec7c6e4.png) 瘦菱形"|" ![](https://img-blog.csdnimg.cn/img_convert/36a22622ae74b212dc3a1e9abd6c97a8.png) 竖线"_" ![](https://img-blog.csdnimg.cn/img_convert/039fc46c3a820ab1a11987ec51937269.png) 横线0 (TICKLEFT) ![](https://img-blog.csdnimg.cn/img_convert/78dca5cd6a1a4ef9a7c132c31e6d139f.png) 左横线1 (TICKRIGHT) ![](https://img-blog.csdnimg.cn/img_convert/9f786cebbaff1e37fa54841e2cfb536b.png) 右横线2 (TICKUP) ![](https://img-blog.csdnimg.cn/img_convert/443c6fe5a6ded45f8c5dce3535b04c0a.png) 上竖线3 (TICKDOWN) ![](https://img-blog.csdnimg.cn/img_convert/0f612a971254eeaa0ffbd9b2fdcb8330.png) 下竖线4 (CARETLEFT) ![](https://img-blog.csdnimg.cn/img_convert/f49d43434298e9aa9dd9f7e8323b6de7.png) 左箭头5 (CARETRIGHT) ![](https://img-blog.csdnimg.cn/img_convert/77d42f2c87fbb3579a57de7ba7655abc.png) 右箭头6 (CARETUP) ![](https://img-blog.csdnimg.cn/img_convert/233b90293e5e588e48cceeca84c8a9ea.png) 上箭头7 (CARETDOWN) ![](https://img-blog.csdnimg.cn/img_convert/14a62ecabeadd5b979753c537e08a4f6.png) 下箭头8 (CARETLEFTBASE) ![](https://img-blog.csdnimg.cn/img_convert/8a30c80f93da2010f56ebabbbe2c3f1f.png) 左箭头 (中间点为基准)9 (CARETRIGHTBASE) ![](https://img-blog.csdnimg.cn/img_convert/591ec7183a61ddea21b609bbe851823f.png) 右箭头 (中间点为基准)10 (CARETUPBASE) ![](https://img-blog.csdnimg.cn/img_convert/6e8d58cb019249e305510bf3c82a793a.png) 上箭头 (中间点为基准)11 (CARETDOWNBASE) ![](https://img-blog.csdnimg.cn/img_convert/8c1d7350b8f81d8200eac8a894ca7161.png) 下箭头 (中间点为基准)"None", " " or ""没有任何标记'$...$' ![](https://img-blog.csdnimg.cn/img_convert/d4cb4a4330a3daa8c8fcef5855e12e04.png) 渲染指定的字符。例如 "$f$" 以字母 f 为标记。
1.2线类型:
线类型标记描述'-'实线':'虚线'--'破折线'-.'点划线
1.3颜色类型:
颜色标记描述'r'红色'g'绿色'b'蓝色'c'青色'm'品红'y'黄色'k'黑色'w'白色
标记大小与颜色
我们可以自定义标记的大小与颜色,使用的参数分别是:
markersize,简写为 ms:定义标记的大小。markerfacecolor,简写为 mfc:定义标记内部的颜色。markeredgecolor,简写为 mec:定义标记边框的颜色。
1.4线的类型
线的类型可以使用 linestyle 参数来定义,简写为 ls。
类型简写说明'solid' (默认)'-'实线'dotted'':'点虚线'dashed''--'破折线'dashdot''-.'点划线'None''' 或 ' '不画线
1.5线的颜色
线的颜色可以使用 color 参数来定义,简写为 c。
颜色类型:
颜色标记描述'r'红色'g'绿色'b'蓝色'c'青色'm'品红'y'黄色'k'黑色'w'白色
当然也可以自定义颜色类型,例如:SeaGreen、#8FBC8F 等,完整样式可以参考 HTML 颜色值。
1.6标题与标签的定位
title() 方法提供了 loc 参数来设置标题显示的位置,可以设置为: 'left', 'right', 和 'center', 默认值为 'center'。
xlabel() 方法提供了 loc 参数来设置 x 轴显示的位置,可以设置为: 'left', 'right', 和 'center', 默认值为 'center'。
ylabel() 方法提供了 loc 参数来设置 y 轴显示的位置,可以设置为: 'bottom', 'top', 和 'center', 默认值为 'center'。
1.7Matplotlib 网格线
我们可以使用 pyplot 中的 grid() 方法来设置图表中的网格线。
grid() 方法语法格式如下:
matplotlib.pyplot.grid(b=None, which='major', axis='both', )
参数说明:
b:可选,默认为 None,可以设置布尔值,true 为显示网格线,false 为不显示,如果设置 **kwargs 参数,则值为 true。which:可选,可选值有 'major'、'minor' 和 'both',默认为 'major',表示应用更改的网格线。axis:可选,设置显示哪个方向的网格线,可以是取 'both'(默认),'x' 或 'y',分别表示两个方向,x 轴方向或 y 轴方向。**kwargs:可选,设置网格样式,可以是 color='r', linestyle='-' 和 linewidth=2,分别表示网格线的颜色,样式和宽度。
|