Python绘图

Python绘图

之前看学习方法的时候,看到知乎 @核聚 的进步本,当时体会不是很深刻,随着学习过程中的反思,感觉确实比较有用,最重要的一条我觉得就是:每天结束时想想哪些你真的懂了,还有哪些你不明白。一定要确认这件事情,这会让你的学习不会感到恐慌,我觉得这对于我来说非常重要,因为它可以减少我学习过程中的恐惧感和无助感。那么今天就是作为对进步本的实践,总结一下关于Python绘图的一些知识。

绘图主要是为了使数据更加直观的展示出来,也可以称之为数据的可视化,例如我们之前使用Excel做的柱状图、饼图、折线图都可以称之为数据的可视化。那么使用Python作图有哪些优势呢?我自己的感觉是使用代码可以批量作图,并且对于图形的定制化能力强一些,而且支持Latex语法,如果需要展示诸如 \sigma、\beta 等字符时十分方便。

当然,我现在也只是粗浅的总结一下自己的观点,不妥之处还望指正。我感觉首先需要数据,以后处理的时候可以通过读入csv、excel文件等形式,这里为了简略还是用一些简单的数据。比如最简单的线形图,就可以使用以下代码:

import numpy as np
import matplotlib.pyplot as plt
#添加中文支持
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] =False 
a=[2,4,5,6]
plt.plot(a)       
示例

我认为这里可以把plt当做一个对象,他有很多个函数,比如plot()函数(这里针对的是对当前的图像进行操作),我们传进去一组数据,就会返回一个结果。上面只是一个最简单的示例,我们还可以添加标题,副标题,控制坐标轴范围,控制图形的颜色、形状等。如下面的代码:

import numpy as np
import matplotlib.pyplot as plt
a=[1,3,4,8]
b=[2,4,5,6]
plt.plot(a,b,'go') #g表示green,o表示原点,可参考更多其它设置
plt.axis([0, 10, 0, 10])
plt.xlabel('x')
plt.ylabel('y')
plt.title('Sample')
plt.text(1, 5, r'$\sigma$')
plt.grid(True)
plt.annotate('See Here',xy=(1.2,5.2),xytext=(2,7),
             arrowprops=dict(facecolor='black',shrink=0.05))
plt.show()

下面是饼图的一个小例子:

import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
plt.rcParams['axes.unicode_minus'] =False 
plt.style.use('ggplot')
plt.xlim(0,10)
plt.ylim(0,10)
wage=[0.2,0.3,0.1,0.4]
labels=['中专','大专','本科','硕士']
plt.axes(aspect='equal')
plt.title('饼图')
plt.pie(
        x=wage,
        labels=labels,
        textprops = {'fontsize':12, 'color':'k'},
        autopct='%.1f%%', # 显示数据
)

如何在一幅图上画多条线呢?也非常简单~

import numpy as np
import matplotlib.pyplot as plt
a=[1,3,4,8]
b=[2,4,5,6]
c=[3,6,8,10]
#分别画两条线
plt.plot(a,b,'go') #g表示green,o表示原点,可参考更多其它设置
plt.plot(a,c,'r-') #r表示red,o表示原点,可参考更多其它设置
plt.axis([0, 10, 0, 10])
plt.xlabel('x')
plt.ylabel('y')
plt.title('Sample')
plt.text(1, 5, r'$\sigma$')
plt.grid(True)
plt.annotate('See Here',xy=(1.2,5.2),xytext=(2,7),
             arrowprops=dict(facecolor='black',shrink=0.05))
plt.show()    

结果如图所示:

如何画子图呢?也并不难~

import numpy as np
import matplotlib.pyplot as plt
a=[1,3,4,8]
b=[2,4,5,6]
c=[3,6,8,10]
plt.figure(1)
#画第一幅子图
plt.subplot(1, 2, 1)
plt.plot(a,b,'go') #g表示green,o表示原点,可参考更多其它设置
#画第二幅子图
plt.subplot(1, 2, 2)
plt.plot(a,c,'r-') #r表示red,o表示原点,可参考更多其它设置
plt.show()    

结果如下:

学完这些,感觉对于我来说基本上就够用了!

编辑于 2020-07-22 19:18