在上一篇文章中,我们简单了解了如何使用 Pandas 和 Matplotlib。
这次,我们将用 Pandas 导入的 Excel 数据进行 Matplotlib 可视化。
由于 Matplotlib 支持数据框,我们只需简单地在导入的 Excel 中指定 x 值和 y 值。
1. 使用 Pandas 导入 Excel
好,接下来让我们从起初村开始。使用我们上次看到的山雀文件夹,使用 pandas 导入按地区的高温天数。

然后,将我们在上一篇关于使用 Matplotlib 的文章中看到的设置韩文字体的代码复制并粘贴。
import pandas as pd
# 模块调用及韩文字体设置
import matplotlib.pyplot as plt
import matplotlib
# MacOS 字体设置
# matplotlib.rcParams["font.family"] = "AppleGothic"
# Windows 字体设置
matplotlib.rcParams["font.family"] = "Malgun Gothic"
# 字体大小设置
matplotlib.rcParams["font.size"] = 13
# 解决负号显示问题
plt.rcParams['axes.unicode_minus'] = False
hot = pd.read_excel("./hot_wave.xlsx")
hot.head(3)由于使用结构化数据,所以这样做就完成了为数据可视化做准备。
现在,让我们利用这些数据绘制图表。

2. 用 Matplotlib 可视化
既然已经导入了数据,那么让我们试着直接放入。
像下面这样直接放入整个数据框。
plt.plot(hot)结果将得到如下图表。
你可能直觉上觉得有些不对。

这是因为Excel 数据中的年份被作为 y 值。
除非指定 x 轴和 y 轴,否则plot 将解释给定值为 y 值并进行显示。

如图所示,将x 轴值给为按年份,y 轴值为除年份以外的所有值。
plt.plot(hot["연도별"], hot.loc[:, "서울(일)":])这一次,你会发现有些符合我们期望的图表形式。

3. 加工为理想形式
现在,只需将数据加工为所需形式即可放入 plot。
按照上次文章的顺序进行即可。
选择 x 轴和 y 轴 数据
设置标题
设置图例
设置坐标轴名称
座标轴间隔设置(如有必要)
更改图表样式
有关代码的详细说明,请参考上一篇文章。
本文将尽量专注于代码的应用示例。
1) 选择 x 轴、y 轴数据
首先,我们计划比较首尔、大田、大邱的高温天数。
由于在上面的输出中可以看到数据,轻松地用iloc 提取进行了图表绘制。
x = hot.iloc[:,0]
y = hot.iloc[:,[1,3,4]]
plt.plot(x, y)
如果图表输出如下图所示,则成功。

2) 设置标题
标题确定为“按地区的高温天数”。
x = hot.iloc[:,0]
y = hot.iloc[:,[1,3,4]]
plt.plot(x, y)
plt.title("시도별 폭염일수") # <-- 添加!
3) 设置图例
由于很难知道图表的值是什么,所以设置图例。可以使用columns轻松显示图例。
x = hot.iloc[:,0]
y = hot.iloc[:,[1,3,4]]
plt.plot(x, y, label=y.columns) # <-- 添加!
plt.legend() # <-- 添加!
plt.title("시도별 폭염일수")
4) 设置坐标轴名称
为坐标轴指定名称。 x 轴是年度,y 轴是高温天数。
x = hot.iloc[:,0]
y = hot.iloc[:,[1,3,4]]
plt.plot(x, y, label=y.columns)
plt.legend()
plt.title("시도별 폭염일수")
plt.xlabel("연도") # <-- 添加!
plt.ylabel("폭염일수") # <-- 添加!
5) 设置轴间隔
即便如此,我仍觉得坐标间隔很不错。
我们直接跳过这一步。
6) 更改图表样式
希望图表样式在黑白情况下也能清晰区分。由于无法一次性设置样式,所以通过for 循环遍历数据列来指定样式。
x = hot.iloc[:,0]
y = hot.iloc[:,[1,3,4]]
lines = ["o-", "r^:", "bd--"] # <-- 添加!
for i in range(len(y.columns)): # <-- 添加!
plt.plot(x,y.iloc[:,i], lines[i] ,label=y.columns[i])
plt.legend()
plt.title("시도별 폭염일수")
plt.xlabel("연도")
plt.ylabel("폭염일수")
4. 后期处理
若有不满意之处,稍加修改。
看图表时,我希望有一些虚线以便更清晰地查看值。
在谷歌中搜索“matplotlib grid”。

我们心爱的维基文档排在最前面。
进去看看吧。

轻轻将内容复制,粘贴到我的代码中。
当然,可以根据需要进行更改。
x = hot.iloc[:,0]
y = hot.iloc[:,[1,3,4]]
lines = ["o-", "r^:", "bd--"]
for i in range(len(y.columns)):
plt.plot(x,y.iloc[:,i], lines[i] ,label=y.columns[i])
plt.legend()
plt.title("시도별 폭염일수")
plt.xlabel("연도")
plt.ylabel("폭염일수")
plt.grid(linestyle="--") # <-- 添加!
这样我就满意了。
但为什么从 2008 年开始……?
好像太长了。
减少输出年份并更改 x 轴。
x = hot.iloc[6:,0] # <-- 添加!
y = hot.iloc[6:,[1,3,4]] # <-- 添加!
lines = ["o-", "r^:", "bd--"]
for i in range(len(y.columns)):
plt.plot(x,y.iloc[:,i], lines[i] ,label=y.columns[i])
plt.grid(linestyle="--")
plt.legend()
plt.title("시도별 폭염일수")
plt.xlabel("연도")
plt.ylabel("폭염일수")
plt.xticks(x) # <-- 添加!这样一来,最近 10 年的首尔、大田、大邱高温天数图表完成了。

可以用于考试问题或提出所需结论时使用。
5. 总结
这次我们使用高温天数数据进行了简单的可视化。
下一篇文章中,我们将解决一个相同图表的练习问题。
댓글을 불러오는 중...