#导入matplotil库,用于画图
import matplotlib.pyplot as plt
#导入numpy库,用于数据处理
import numpy as np
#画图
data = np.arange(10)
plt.plot(data)
#使图像展示出来
plt.show()
上面的代码展示了最简单的图片绘制。总结起来有一下几个步骤:
data = np.arange(10)
生成从0-9的整数。plt.show()
,在PyCharm中不会自动弹出绘制出来的图形,需要在PyCharm界面的最右侧点击‘Sciview’按钮进行查看。另在,如果是在Jupyter中绘图,需要加入代码matplotlib notebook
,如果是在Ipython中运行,则需要加入代码matplotlib
。上述代码的执行效果如下所示。
#导入matplotil库,用于画图
import matplotlib.pyplot as plt
#导入numpy库,用于数据处理
import numpy as np
#画图
data = np.arange(10)
#第一种生成子图的方式
fig = plt.figure() #生成一个图片对象
#将fig划分成2行2列4个子图 ,a1表示第1个子图,对应subplot的三个参数。
a1 = fig.add_subplot(2,2,1)
#在生成两个子图
a2 = fig.add_subplot(2,2,2)
a3 = fig.add_subplot(2,2,3)
#绘图
plt.plot(np.random.randn(50).cumsum(),‘k--‘)
_ = a1.hist(np.random.randn(100),bins=20,color = ‘k‘,alpha=0.3)
a2.scatter(np.arange(30),np.arange(30)+2*np.random.randn(30))
#第二种生成子图的方式。
#生成2行3列的子图,sharex表示所有子图横坐标范围相同
fig,axs = plt.subplots(2,3,sharex=True)
#对在第1行第2列的子图进行绘制
axs[0,1].hist(np.random.randn(100),bins=20,color = ‘k‘,alpha=0.3)
#使图像展示出来
plt.show()
常用的生成子图的方式有两种。
对于第一种,先生成一个图片对象,然后在图片对象中添加子图。之后在自图上进行绘制。这里注意,如果直接执行plt.plot
,默认是在最后生成的一张子图上进行绘制。比如本例中使用plt.plot(np.random.randn(50).cumsum(),‘k--‘)
绘制的图出现在了第子图中。‘k--’线条的一些属性,在下一节具体列出。也可以通过‘子图名称.XXX‘的方法来具体指定在哪个子图中绘制。如本例中使用a1.hist()
命令在a1中绘制了柱状图。常见的图片类型见下表,更丰富的指令请参见官方文档。地址请点我!
关键词 | 图片种类 |
---|---|
angle_spectrum | 角度光谱 |
bar | 条形图 |
barh | 水平条图 |
hist | 直方图 |
hist2d | 2D直方图 |
phase_spectrum | 相位频谱 |
pie | 饼图 |
ploar | 极性图 |
psd | 功率光谱密度 |
scatter | 散点图 |
specgram | 光谱图 |
stackplot | 堆叠区域图 |
step | 步骤图 |
第一种的图片效果如下所示;
第二种创建子图的方式与第一种类似。使用subplots创建一组图,其中参数中的2,3表示2行3列,sharex参数表示所有子图共享同样的横坐标范围。subplots还有一些其他的参数,具体请查看官网文档。在绘制子图时,可以使用如本例中axs[0,1]
的方式进行指定,[0,1]参数表示第一行第二列的子图(行和列的计数从零开始)。效果如下所示。
可以使用plt.subplots_adjust()
函数来调整子图间距。
#导入matplotil库,用于画图
import matplotlib.pyplot as plt
#导入numpy库,用于数据处理
import numpy as np
from numpy.random import randn
#画图
data = np.random.randn(30).cumsum()
plt.plot(data,color=‘k‘, linestyle=‘dashed‘, marker=‘o‘, label=‘One‘)
plt.plot(data,‘r-‘, drawstyle=‘steps-post‘, label=‘Two‘)
#生成图例
plt.legend(loc=‘best‘)
plt.show()
上面的代码中有两个plt.plot,所以可以在同一个图中绘制两条不同的线。
效果如下所示:
# 导入matplotil库,用于画图
import matplotlib.pyplot as plt
# 导入numpy库,用于数据处理
import numpy as np
from numpy.random import randn
# 画图
fig = plt.figure()
ax = fig.add_subplot(1, 1, 1)
ax.plot(np.random.randn(1000).cumsum())
# 设置x轴上,哪些坐标处需要加刻度
ticks = ax.set_xticks([0, 250, 500, 750, 1000])
# 设置刻度的内容
labels = ax.set_xticklabels([‘one‘, ‘two‘, ‘three‘, ‘four‘, ‘five‘], rotation=45, fontsize=‘small‘)
# 设置横坐标的名称
ax.set_xlabel(‘Stages‘)
plt.show()
效果如下所示。
# 导入matplotil库,用于画图
import matplotlib.pyplot as plt
# 导入numpy库,用于数据处理
import numpy as np
from numpy.random import randn
from datetime import datetime
import pandas as pd
fig = plt.figure()
ax = fig.add_subplot(1, 1, 1)
data = pd.read_csv(‘C:/Users/Nighthink/Downloads/pydata-book/examples/spx.csv‘, index_col=0, parse_dates=True)
spx = data[‘SPX‘]
spx.plot(ax=ax, style=‘k-‘)
crisis_data = [
(datetime(2007, 10, 11), ‘Peak of bull market‘),
(datetime(2008, 3, 12), ‘Bear Stearns Fails‘),
(datetime(2008, 9, 15), ‘Lehman Bankruptcy‘)
]
for date, label in crisis_data:
ax.annotate(label, xy=(date, spx.asof(date) + 75),
xytext=(date, spx.asof(date) + 225),
arrowprops=dict(facecolor=‘black‘, headwidth=4, width=2,
headlength=4),
horizontalalignment=‘left‘, verticalalignment=‘top‘)
# Zoom in on 2007-2010
ax.set_xlim([‘1/1/2007‘, ‘1/1/2011‘])
ax.set_ylim([600, 1800])
ax.set_title(‘Important dates in the 2008-2009 financial crisis‘)
效果如下所示:
执行代码plt.savegif(‘fig.png‘,dpi=400,bbox_inches=‘tight‘)
可以将图保存成png格式,文件名是fig,dpi参数表示每英寸点数的分辨率,bbox_inches参数可以用来控制实际图像四周的空白。
原文:https://www.cnblogs.com/SummerMorning/p/13125301.html