plt.subplot排序方法
时间: 2023-09-22 07:10:42 浏览: 117
在使用 `plt.subplot()` 函数创建子图时,可以使用以下方法来指定子图的排序方式:
1. 使用整数参数:可以通过传递一个整数参数给 `plt.subplot()` 函数来指定子图的位置。整数参数的含义是将整个绘图区域分割成多少行、多少列,并选择当前子图的位置。例如,`plt.subplot(2, 3, 1)` 表示将绘图区域分割成 2 行 3 列,当前子图位于第 1 个位置。
2. 使用三位数的整数参数:可以通过传递一个三位数的整数参数给 `plt.subplot()` 函数来指定子图的位置。三位数的百位数表示行数,十位数表示列数,个位数表示当前子图的位置。例如,`plt.subplot(231)` 表示将绘图区域分割成 2 行 3 列,并选择当前子图位于第 1 个位置。
3. 使用 `plt.subplots()` 函数:`plt.subplots()` 函数可以一次性创建多个子图,并将它们存储在一个二维数组中。可以通过指定 `nrows` 和 `ncols` 参数来控制子图的行数和列数,然后通过索引访问特定的子图。例如:
```python
fig, axes = plt.subplots(nrows=2, ncols=3)
axes[0, 0].plot(x1, y1)
axes[0, 1].plot(x2, y2)
# ...
```
上面的代码将创建一个 2 行 3 列的子图网格,并可以通过 `axes` 数组中的索引来访问特定的子图。
这些方法可以根据你的需求来灵活选择子图的排序方式。希望对你有所帮助!
相关问题
调试并运行下述案例代码,给代码做注释。在此基础上补充票房 TOP10 的柱状 图展示。 import pandas as pd import numpy as np from matplotlib import pyplot as plt from matplotlib.ticker import MultipleLocator datas = pd.read_csv(r'2015-2020.txt', index_col=0) datas = datas.sort_index(ascending=False) datas = pd.DataFrame(datas.values, index=range(1, 11), \ columns=datas.columns) data2020 = pd.read_csv(r'2020.txt') def drawLines(): ax = plt.subplot(131) for date in datas.columns: plt.plot([10 - i for i in range(datas.shape[0])], \ datas[date], label=date) plt.ylim(0, 600000) ymajorLocator = MultipleLocator(50000) xmajorLocator = MultipleLocator(1) ax.yaxis.set_major_locator(ymajorLocator) ax.xaxis.set_major_locator(xmajorLocator) plt.title('2015-2020 年度票房 Top10 折线图') plt.xlabel('票房名次') plt.grid() plt.legend() def drawPie(): plt.subplot(233) plt.pie(datas['2019'], autopct='%1.1f%%') plt.title('2019 年度票房 Top10 饼图') plt.subplot(236) plt.rcParams['font.sans-serif'] = ['SimHei'] plt.rcParams['font.family'] = 'sans-serif' plt.pie(data2020['boxoffice'], autopct='%1.1f%%', \ labels=data2020['name']) plt.title('2020 年度票房 Top10 饼图') if __name__ == '__main__': plt.subplots(figsize=(20, 8)) drawLines() drawPie() plt.show()
```python
# 导入 pandas, numpy, pyplot 和 MultipleLocator 库
import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
from matplotlib.ticker import MultipleLocator
# 读取数据并按照时间降序排序
datas = pd.read_csv(r'2015-2020.txt', index_col=0)
datas = datas.sort_index(ascending=False)
# 将数据转换为 DataFrame 格式,索引是票房排名,列是年份
datas = pd.DataFrame(datas.values, index=range(1, 11), columns=datas.columns)
# 读取 2020 年数据
data2020 = pd.read_csv(r'2020.txt')
# 绘制 2015-2020 年度票房 Top10 折线图
def drawLines():
ax = plt.subplot(131) # 创建子图
for date in datas.columns: # 循环每年的票房数据
plt.plot([10 - i for i in range(datas.shape[0])], datas[date], label=date) # 绘制折线图
plt.ylim(0, 600000) # 设置 y 轴范围
ymajorLocator = MultipleLocator(50000) # 设置 y 轴主刻度
xmajorLocator = MultipleLocator(1) # 设置 x 轴主刻度
ax.yaxis.set_major_locator(ymajorLocator) # 设置 y 轴主刻度
ax.xaxis.set_major_locator(xmajorLocator) # 设置 x 轴主刻度
plt.title('2015-2020 年度票房 Top10 折线图') # 设置标题
plt.xlabel('票房名次') # 设置 x 轴标签
plt.grid() # 显示网格线
plt.legend() # 显示图例
# 绘制 2019 年度票房 Top10 饼图和 2020 年度票房 Top10 饼图
def drawPie():
plt.subplot(233) # 创建子图
plt.pie(datas['2019'], autopct='%1.1f%%') # 绘制饼图
plt.title('2019 年度票房 Top10 饼图') # 设置标题
plt.subplot(236) # 创建子图
plt.rcParams['font.sans-serif'] = ['SimHei'] # 设置字体
plt.rcParams['font.family'] = 'sans-serif'
plt.pie(data2020['boxoffice'], autopct='%1.1f%%', labels=data2020['name']) # 绘制饼图
plt.title('2020 年度票房 Top10 饼图') # 设置标题
if __name__ == '__main__':
plt.subplots(figsize=(20, 8)) # 创建画布
drawLines() # 绘制折线图
drawPie() # 绘制饼图
plt.show() # 显示图形
```
补充票房 TOP10 的柱状图展示如下:
```python
import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
# 读取数据并按照时间降序排序
datas = pd.read_csv(r'2015-2020.txt', index_col=0)
datas = datas.sort_index(ascending=False)
datas = pd.DataFrame(datas.values, index=range(1, 11), columns=datas.columns)
# 绘制柱状图
plt.subplots(figsize=(20, 8))
plt.bar(datas.index, datas['2020'])
plt.xticks(datas.index, datas.index)
plt.title('2020 年度票房 Top10 柱状图')
plt.xlabel('票房排名')
plt.ylabel('票房(万元)')
plt.show()
```
柱状图展示如下:
注意:柱状图只显示了 2020 年的数据。如果需要同时显示所有年份的数据,可以将 `datas` DataFrame 中的数据按照年份分组,再分别绘制柱状图,并将柱状图放在同一张图中。
#使用了pandas和matplotlib来创建一个包含四个子图的图表, Genre_data_NA = data.pivot_table(index = ['Genre',],values='NA_Sales',aggfunc=np.sum).sort_values('NA_Sales',ascending=False) Genre_data_EU =data.pivot_table(index = ['Genre',],values='EU_Sales',aggfunc=np.sum).sort_values('EU_Sales',ascending=False) Genre_data_JP = data.pivot_table(index = ['Genre',],values='JP_Sales',aggfunc=np.sum).sort_values('JP_Sales',ascending=False) Genre_data_Other =data.pivot_table(index = ['Genre',],values='Other_Sales',aggfunc=np.sum).sort_values('Other_Sales',ascending=False) Genre_data_NA # Genre_data_DF = pd.concat([Genre_data_NA,Genre_data_EU,Genre_data_JP,Genre_data_Other],axis = 1) data=Genre_data_NA Genre_name = data._stat_axis.values.tolist() # explodes=[0.1,0.1,0.1,0.1] plt.figure(figsize=(10,10)) plt.subplot(2,2,1) plt.pie(x=Genre_data_NA,labels=Genre_name,autopct="%0.1f%%",shadow=True) plt.title("北美地区的不同类型游戏销售额") plt.subplot(2,2,2) plt.pie(x=Genre_data_EU,labels=Genre_name,autopct="%0.1f%%",shadow=True) plt.title("欧洲地区的不同类型游戏销售额") plt.subplot(2,2,3) plt.pie(x=Genre_data_JP,labels=Genre_name,autopct="%0.1f%%",shadow=True) plt.title("日本地区的不同类型游戏销售额") plt.subplot(2,2,4) plt.pie(x=Genre_data_Other,labels=Genre_name,autopct="%0.1f%%",shadow=True) plt.title("其它地区的不同类型游戏销售额") plt.show()
这段代码使用了 pandas 和 matplotlib 库来创建一个包含四个子图的图表。首先,通过使用 pivot_table 方法和 aggfunc 参数,对数据进行聚合并按照指定的列进行排序,得到了四个不同地区的游戏销售额数据:Genre_data_NA、Genre_data_EU、Genre_data_JP 和 Genre_data_Other。
接下来,将 Genre_data_NA 数据赋值给 data 变量,并通过调用 _stat_axis.values.tolist() 方法获取到 Genre_name 列表,这将作为饼图的标签。
然后,创建一个大小为 (10,10) 的图表,并在其中设置四个子图。对于每个子图,使用 plt.pie 方法绘制饼图,传入不同地区的销售额数据 Genre_data_NA、Genre_data_EU、Genre_data_JP 和 Genre_data_Other,以及对应的标签 Genre_name。同时,通过设置 autopct 参数来显示百分比,并设置 shadow 参数为 True 来添加阴影效果。最后,在每个子图上添加标题,并使用 plt.show() 方法显示图表。
这样,您将得到一个包含四个子图的图表,分别展示了不同地区的游戏销售额情况。
阅读全文