matplotlib简单示例

matplotlib简单示例

一、简介

以下引用自百度百科

Matplotlib 是一个 Python 的 2D绘图库,它以各种硬拷贝格式和跨平台的交互式环境生成出版质量级别的图形 。
通过 Matplotlib,开发者可以仅需要几行代码,便可以生成绘图,直方图,功率谱,条形图,错误图,散点图等。

二、流程

1. 明确要研究的问题
2. 选择需要使用什么图形(折线图、直方图……)来呈现
3. 准备相应的数据
4. 绘制图形和完善美化图形

在某些情况下,个人认为还有最后一点,是从图中可以得出什么结论。
以下只是简单的示例,就没有一定按照上面的流程。

三、简单示例

1.折线图

1.1 什么是折线图

以下引用自百度百科

折线图是排列在工作表的列或行中的数据可以绘制到折线图中。折线图可以显示随时间(根据常用比例设置)而变化的连续数据,因此非常适用于显示在相等时间间隔下数据的趋势。

简单来说,折线图可以反映事物的变化情况。

1.2 准备数据

数据来自国家数据,选取了1978年至2017年的研究生招生数研究生毕业生数,下面只列举了部分数据。

 2017年2016年2015年2014年2013年...
研究生招生数(万人)80.610366.706464.505562.132361.1381...
研究生毕业生数(万人)57.804556.393855.152253.586351.3626...

1.3 绘制完善图形

附上代码,看注释吧。

<span style="color:#444444"><code><span style="color:#0000ff">from</span> matplotlib <span style="color:#0000ff">import</span> pyplot <span style="color:#0000ff">as</span> plt
<span style="color:#0000ff">from</span> matplotlib <span style="color:#0000ff">import</span> font_manager

<span style="color:green"># matplotlib默认不支持中文字符,设置中文字体,参数的值为系统字体路径</span>
my_font = font_manager.FontProperties(fname=<span style="color:#a31515">r"C:\Windows\Fonts\simsun.ttc"</span>)

<span style="color:green"># 需要绘制的数据</span>
x = list(range(1978, 2018))
y_recruit = list(reversed(
    [80.6103, 66.7064, 64.5055, 62.1323, 61.1381, 58.9673, 56.0168, 53.8177, 51.0953, 44.6422, 41.8612, 39.7925,
     36.4831, 32.6286, 26.8925, 20.2611, 16.5197, 12.8484, 9.2225, 7.2508, 6.3749, 5.9398, 5.1053, 5.0864, 4.2145,
     3.3439, 2.9679, 2.9649, 2.8569, 3.5645, 3.9017, 4.131, 4.6871, 2.3181, 1.5642, 1.108, 0.9363, 0.3616, 0.811,
     1.0708]))
y_graduate = list(reversed(
    [57.8045, 56.3938, 55.1522, 53.5863, 51.3626, 48.6455, 42.9994, 38.36, 37.1273, 34.4825, 31.1839, 25.5902, 18.9728,
     15.0777, 11.1091, 8.0841, 6.7809, 5.8767, 5.467, 4.7077, 4.6539, 3.9652, 3.1877, 2.8047, 2.8214, 2.5692, 3.2537,
     3.544, 3.7232, 4.0838, 2.7603, 1.695, 1.7004, 0.2756, 0.4497, 0.4058, 1.1669, 0.0476, 0.014, 0.0009]))

<span style="color:green"># 设置图形大小,dpi</span>
plt.figure(figsize=(10,6.18),dpi=100)

<span style="color:green"># 绘制第一条折线</span>
plt.plot(x,y_recruit,label=<span style="color:#a31515">"研究生招生数"</span>)
<span style="color:green"># 绘制第二条折线</span>
plt.plot(x,y_graduate,
         label=<span style="color:#a31515">"研究生毕业生数"</span>,       <span style="color:green"># 图例显示内容</span>
         color=<span style="color:#a31515">"orange"</span>,             <span style="color:green"># 线条颜色</span>
         linewidth=3,                <span style="color:green"># 线宽</span>
         linestyle=<span style="color:#a31515">"--"</span>)             <span style="color:green"># 线条样式</span>

<span style="color:green"># 设置x轴刻度,rotation为旋转度数</span>
plt.xticks(x[::2],rotation=45)

<span style="color:green"># 设置图例,prop为设置字体,fontsize为设置字体大小</span>
plt.legend(prop=my_font,fontsize=12)

<span style="color:green"># 绘制网格,alpha为透明度</span>
plt.grid(alpha=0.5)

<span style="color:green"># 添加描述信息,fontproperties为设置字体,fontsize为设置字体大小</span>
plt.xlabel(<span style="color:#a31515">"年份"</span>,fontproperties=my_font,fontsize=12)
plt.ylabel(<span style="color:#a31515">"人数(万人)"</span>,fontproperties=my_font,fontsize=12)
plt.title(<span style="color:#a31515">"1978年至2017年研究生招生数和研究生毕业生数情况"</span>,fontproperties=my_font,fontsize=18)

<span style="color:green"># 显示图形</span>
plt.show()
</code></span>

1.4 绘制图形结果

运行上述代码,结果如下。

2.条形图

2.1 什么是条形图

以下引用自百度百科

条形图(bar chart)是用宽度相同的条形的高度或长短来表示数据多少的图形。条形图可以横置或纵置,纵置时也称为柱形图(column chart)。此外,条形图有简单条形图、复式条形 图等形式。

简单来说,条形图可以直观地反映数据的大小。

2.2 准备数据

数据同样来自国家数据,选取了2009年、2010年和2011年各级各类学校数,具体数据如下。

 200920102011
普通高等学校数(所)230523582409
普通中学学校数(所)707746888167751
高中学校数(所)146071405813688
初中学校数(所)561675482354063
职业中学学校数(所)580552734856
普通小学学校数(所)280184257410241249
特殊教育学校学校数(所)167217061767
学前教育学校数(所)138209150420166750

2.3 绘制完善图形

代码如下:

<span style="color:#444444"><code>x = [<span style="color:#a31515">"普通高等学校数"</span>, <span style="color:#a31515">"普通中学学校数"</span>,<span style="color:#a31515">"高中学校数"</span>,
        <span style="color:#a31515">"初中学校数"</span>,<span style="color:#a31515">"职业中学学校数"</span>,<span style="color:#a31515">"普通小学学校数"</span>,
        <span style="color:#a31515">"特殊教育学校数"</span>,<span style="color:#a31515">"学前教育学校数"</span>]
y_09 = [2305,70774,14607,56167,5805,280184,1672,138209]
y_10 = [2358,68881,14058,54823,5273,257410,1706,150420]
y_11 = [2409,67751,13688,54063,4856,241249,1767,166750]

plt.figure(figsize=(10,6.18),dpi=100)
bar_width = 0.25

x_09 = list(range(len(x)))
x_10 = list(i + bar_width <span style="color:#0000ff">for</span> i <span style="color:#0000ff">in</span> range(len(x)))
x_11 = list(i + bar_width * 2 <span style="color:#0000ff">for</span> i <span style="color:#0000ff">in</span> range(len(x)))

plt.barh(x_09,y_09,height=bar_width,label=<span style="color:#a31515">"2009年"</span>)
plt.barh(x_10,y_10,height=bar_width,label=<span style="color:#a31515">"2010年"</span>)
plt.barh(x_11,y_11,height=bar_width,label=<span style="color:#a31515">"2011年"</span>)

plt.legend(prop=my_font, fontsize=12)
plt.grid(alpha=0.5,linestyle=<span style="color:#a31515">"--"</span>)
plt.yticks(x_10,x,fontproperties=my_font)
plt.xlabel(<span style="color:#a31515">"数量(所)"</span>,fontproperties=my_font,fontsize=12)
plt.title(<span style="color:#a31515">"2009年、2010年及2011年各级各类学校数情况"</span>,fontproperties=my_font,fontsize=18)

plt.show()</code></span>

2.4 绘制图形结果

运行上述代码,结果如下。

3.直方图

3.1 什么是直方图

以下引用自百度百科

直方图(Histogram)又称质量分布图。是一种统计报告图,由一系列高度不等的纵向条纹或线段表示数据分布的情况。 一般用横轴表示数据类型,纵轴表示分布情况。
为了构建直方图,第一步是将值的范围分段,即将整个值的范围分成一系列间隔,然后计算每个间隔中有多少值。 这些值通常被指定为连续的,不重叠的变量间隔。 间隔必须相邻,并且通常是(但不是必须的)相等的大小。

3.2 准备数据

数据选用上一篇随笔:爬取豆瓣电影信息中爬取到的电影的时长。去除无效数据后,从下图可以看出总共有2247条数据,最大值为170,最小值为3。

3.3 绘制完善图形

代码如下:

<span style="color:#444444"><code>plt.figure(figsize=(10,6.18),dpi=100)

plt.hist(df[<span style="color:#a31515">"running_time"</span>],range(0,171,10),color=<span style="color:#a31515">"#009900"</span>)

plt.xticks(range(0,171,10))
plt.yticks(range(0,650,50))

plt.grid(alpha=0.5,linestyle=<span style="color:#a31515">"--"</span>)

plt.xlabel(<span style="color:#a31515">"时长(分钟)"</span>,fontproperties=my_font,fontsize=12)
plt.ylabel(<span style="color:#a31515">"数量"</span>, fontproperties=my_font,fontsize=12)
plt.title(<span style="color:#a31515">"电影片长分布情况"</span>, fontproperties=my_font,fontsize=18)

plt.show()</code></span>

3.4 绘制图形结果

运行上述代码,结果如下。

四、结语

  • 本文简单举例介绍了matplotlib绘制折线图、条形图和直方图的方法,matplotlib很强大,可以绘制非常多的图形,可以参考https://matplotlib.org/gallery/index.html
  • 如果文中有错误的地方,希望大家指出,我会积极地学习改正。
  • 最后,感谢大家的阅读!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值