解释一下代码:if __name__ == '__main__': plt.subplots(figsize=(20, 8)) drawLines() drawPie() plt.show()
时间: 2024-05-25 07:14:49 浏览: 18
这段代码是一个典型的 Python 脚本文件的入口,它会在脚本文件被执行时运行。它的作用是:
1. 当脚本文件作为模块被导入时,不会执行下面的代码块。
2. 当脚本文件被直接执行时,会执行下面的代码块。
在这个代码块中,首先使用 `plt.subplots(figsize=(20, 8))` 创建一个大小为 20x8 的画布。然后调用 `drawLines()` 和 `drawPie()` 函数,绘制折线图和饼图。最后使用 `plt.show()` 函数显示图形窗口。
需要注意的是,这段代码中使用了 Matplotlib 库来绘制图形,并且需要保证 Matplotlib 库已经被正确地安装在系统中。
相关问题
调试并运行下述案例代码,给代码做注释。在此基础上补充票房 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 中的数据按照年份分组,再分别绘制柱状图,并将柱状图放在同一张图中。
fft_triangle_GUI.py
以下是一个Python的GUI程序,用于生成和绘制三角波,并对其进行FFT变换。你可以通过交互式的方式改变三角波的基本频率和幅度,并观察其对应的频域幅值谱的变化。
```python
import numpy as np
import matplotlib.pyplot as plt
import tkinter as tk
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
class FFTTriangleGUI:
def __init__(self):
self.fig, self.axs = plt.subplots(2, 1, figsize=(8, 6))
self.canvas = FigureCanvasTkAgg(self.fig, master=root)
self.canvas.get_tk_widget().pack(side=tk.TOP, fill=tk.BOTH, expand=1)
self.freq_slider = tk.Scale(root, from_=1, to=20, resolution=0.1, orient=tk.HORIZONTAL, label='Frequency (Hz)', command=self.update_triangle)
self.freq_slider.pack(side=tk.TOP, fill=tk.BOTH, padx=5, pady=5)
self.amp_slider = tk.Scale(root, from_=0, to=1, resolution=0.01, orient=tk.HORIZONTAL, label='Amplitude', command=self.update_triangle)
self.amp_slider.pack(side=tk.TOP, fill=tk.BOTH, padx=5, pady=5)
self.freq = 5
self.amp = 0.5
self.update_triangle(None)
def update_triangle(self, event):
t = np.linspace(0, 1, 400, endpoint=False)
x = np.concatenate((t, np.flip(t)))
x -= np.mean(x)
x *= self.amp
x *= np.sin(2 * np.pi * self.freq * t)
self.axs[0].clear()
self.axs[0].plot(t, x[:len(t)])
self.axs[0].set_xlabel('Time (s)')
self.axs[0].set_ylabel('Amplitude')
self.axs[0].set_ylim((-1, 1))
X = np.fft.fft(x)
freqs = np.fft.fftfreq(len(x)) * 400
self.axs[1].clear()
self.axs[1].plot(freqs, np.abs(X))
self.axs[1].set_xlim((0, 20))
self.axs[1].set_xlabel('Frequency (Hz)')
self.axs[1].set_ylabel('Magnitude')
self.canvas.draw()
if __name__ == '__main__':
root = tk.Tk()
root.title('FFT Triangle Wave Demo')
FFTTriangleGUI()
root.mainloop()
```
运行程序后,将会弹出一个窗口,其中包含两个图,一个是三角波的时域波形,另一个是其对应的频域幅值谱。你可以通过拖动滑动条来改变三角波的基本频率和幅度。注意,频率轴的范围限制在0-20Hz之间,因此如果你将频率调整超过该范围,可能会看不到某些谐波分量的幅值。
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)