matpltliab 多子图

怎么在一个图上排列多个子图?

比如说我们想画个2*2的子图,每个子图对应一个表。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
 
fig, axes = plt.subplots(2, 2)
 
data = pd.Series(np.random.rand(16), index=list('abcdefghijklmnop'))
 
data.plot.bar(ax=axes[1,1], color='b', alpha = 0.5)
data.plot.barh(ax=axes[0,1], color='k', alpha=0.5)
 
plt.show()


怎么把多个子图一起合并到一个图上?

最主要的一点是让多个图线共用一个x坐标轴。

语句规定N个折线图共用一个x坐标(注意:y轴分主副轴):

import numpy as np
import matplotlib.pyplot as plt
 
fig, ax1 = plt.subplots(1, 1)             # 做1*1个子图,等价于 " fig, ax1 = plt.subplot() ",等价于 " fig, ax1 = plt.subplots() "
 
ax2 = ax1.twinx()                         # 让2个子图的x轴一样,同时创建副坐标轴。
 
# 作y=sin(x)函数
x1 = np.linspace(0, 4 * np.pi, 100)
y1 = np.sin(x1)
ax1.plot(x1, y1)
 
#  作y = cos(x)函数
x2 = np.linspace(0, 4 * np.pi, 100)       # 表示在区间[0, 4π]之间取100个点(作为横坐标,“线段是有无数多个点组成的”)。
y2 = np.cos(x2)
ax2.plot(x2, y2)
 
plt.savefig('sin_cos_2.png')               # 将窗口另存为png格式图片


如果需要主副y轴都一样:就把ax1和ax2它俩用ax一个取代了。

自定义图表样式:比如旋转x轴标签、上边和右边的坐标轴不显示、曲线和y轴对齐等

import matplotlib.pyplot as plt
 
plt.rcParams['font.family'] = ['SimHei']              # 解决不能输出中文的问题。不区分大小写,即SimHei’效果等价于‘simhei’,中括号可以不要
plt.rcParams['figure.autolayout'] = True              # 解决不能完整显示的问题(比如因为饼图太大,显示窗口太小)
  
fig, ax = plt.subplots(1, 1, figsize=(12, 9))         # 进一步设定fig的size为12*9
 
ax.spines['top'].set_visible(False)                   # 不显示图表框的上边框
ax.spines['right'].set_visible(False)                 # 不显示图表框的右边框
 
ax.set_xlim(0, 10)                                    # 有时候x轴不会从0显示,使得折线图和y轴有间隙
ax.set_ylim(0, 1.3e8)                                 # 和x轴同理
 
plt.xticks(range(0, 10), fontsize=12, rotation=80)    # 针对x轴的标签,指定我们想要设定的范围是(0, 10), 字体大小是12, 逆时针旋转80°
 
plt.tick_params(bottom='off', left='off', labelbottom='on', lableleft='on')  # 使x轴和y轴不带比例标识点, labelbottom设定下边、即x轴的标签是否显示。
 
< blabla... >
 
plt.suptitle('自定义图表', fontsize=400, ha='center')  # 即标题在x轴和y轴形成的方框内部,如下图(详细用法见下注释)。如果需要标题在这上方,使用 plt.title(blabla)            
plt.show()


"""
对于multiple subplots一般情况下,
1)设置 plt.xticks(range(0, 10))只会对最后一个ax起作用。要想作用于所有subplots,要这样:
for ax in axes:
    ax.set_xticks(range(0, 10))
2)标题:显示中文方面-在各个子图上要这样:
plt.title('某个子图的中文title', fontproperties='simhei'),
因为plt.rcParams['font.family'] = 'simhei' 只对整体的标题是有效的。
整体的标题要这样设置:
plt.suptitle(‘全体子图的中文title’)
3)xticks的旋转方面。例如上面的主副坐标轴的共x轴,要这样:
ax1.set_xticklabels(['str format labels'], rotation=80)
而这样的设置无效:plt.xticks(x, rotation=80)。
"""


matplotlib.pyplot.suptitle(
t,                          # text缩写。即标题文字。
fontsize | size,            # 设定字体大小。
x,                          # 设定标题相对于x轴的位置,默认是'0.5'。
y,                          # 设定标题相对于y轴的位置,默认是'0.98'。
ha | horizontalalignment,   # 和参数x一起使用,设定标题水平方位,默认是‘center’。共3个可选值{'center', 'left', right'}。
va | verticalalignment,     # 和参数y一起使用,设定标题垂直方位, 默认是'top'。共4个可选值{'top', 'center', 'bottom', 'baseline'}。
fontweight | weight         # 设定字体权重。
)


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值