需要在同一张图绘制两条曲线时,调用两次plot方法即可,参数c、label可以分别指定颜色和标签,legend方法可以绘制图例
plt.plot(x_values, y_values1, c=’blue’, label=’Women’)
plt.plot(x_values, y_values2, c=’green’, label=’Men’)
plt.legend(loc=’upper right’)
plt.title(‘Percentage of Biology Degrees Awarded By Gender’)
plt.show()
效果如图:图片来自:https://www.dataquest.io/m/147/improving-plot-aesthetics/4/visualizing-the-gender-gap
最大化data-ink比
data-ink比即数据量和图标构成的比例,比例越大,获取信息就越直观,如图所示:
Axes.tick_params方法可以去除轴上的标记
plt.tick_params(bottom=”off”, top=”off”, left=”off”, right=”off”)
Spine.set_visible()方法可以去除图表的边框
fig, ax = plt.subplots()
ax.spines[“right”].set_visible(False)
ax.spines[“left”].set_visible(False)
ax.spines[“top”].set_visible(False)
ax.spines[“bottom”].set_visible(False)
当然,这样写未免太过麻烦。shines是一个dict。print(ax.spines)结果如下:
{‘right’: <matplotlib.spines.spine object=”” at=”” 0x111089c18=””>, ‘bottom’: <matplotlib.spines.spine object=”” at=”” 0x111060898=””>, ‘top’: <matplotlib.spines.spine object=”” at=”” 0x1110606a0=””>, ‘left’: <matplotlib.spines.spine object=”” at=”” 0x11107cd30=””>}</matplotlib.spines.spine></matplotlib.spines.spine></matplotlib.spines.spine></matplotlib.spines.spine>
因此,可以用一个for循环来去除图表的四边
for key,spine in ax.spines.items():
spine.set_visible(False)
subplot方法:绘制子图
subplot将整个绘图区域等分为numRows行* numCols列个子区域,然后按照从左到右,从上到下的顺序对每个子区域进行编号,左上的子区域的编号为1。如果numRows,numCols和plotNum这三个数都小于10的话,可以把它们缩写为一个整数,例如subplot(323)和subplot(3,2,3)是相同的。subplot在plotNum指定的区域中创建一个轴对象。如果新创建的轴和之前创建的轴重叠的话,之前的轴将被删除。
plt.subplot(numRows, numCols, plotNum)
如果要绘制一个第一行两张图,第二行一张图的图表呢?
plt.subplot(2, 2, 1)
plt.subplot(2, 2, 2)
plt.subplot(2, 1, 2)
也因为subplot方法本身的特性,可以方便的用循环来绘制连续的图表
for i in range(0, 4):
plt.subplot(2, 2, 1 + i)
subplot方法返回两个值,第一个是图像对象,第二个则是包含各个子表的元组(tuple),所以我们经常看到这样的代码:
fig, ax = plt.subplots()
此外,注意设置子表的标题使用的不是title方法而是set_title方法
ax.set_title(‘a string’)
类似的,设置坐标轴范围应使用set_x(y)lim方法
ax.set_xlim(1, 2)
ax.set_ylim([‘a’, ‘b’, ‘c’])