使用Emacs Org Mode绘制折线图二——更进一步的数据可视化
var_name='Date',line_terminator=' '))```执行以上代码后。
在上一篇文章中,我们介绍了如何使用Emacs Org Mode绘制简单的折线图。然而,真正实际中需要处理的数据往往比较复杂,需要更加高级的绘图技巧来呈现出来。因此,在本文中,我们将会进一步探讨如何通过Emacs Org Mode实现更为复杂和精美的折线图。
首先,我们需要准备好相关的数据集。这里我选择了一个名为“COVID-19 Data Repository by the Center for Systems Science and Engineering (CSSE) at Johns Hopkins University”的开源项目作为示例数据集。该项目提供了全球各地区COVID-19疫情爆发后每日确诊、死亡和治愈人数等详细统计信息。
接下来,我们要做的就是将这些统计信息导入到Emacs Org Mode中,并进行初步处理以便于后面进行可视化操作。具体而言,在本例中我选择了Python语言对原始数据进行清洗和预处理,并输出成Org表格格式。
“`python
import pandas as pd
# Load raw data
df = pd.read_csv(‘time_series_covid19_confirmed_global.csv’)
# Pivot table to long format
df_long = df.melt(id_vars=[‘Province/State’, ‘Country/Region’, ‘Lat’, ‘Long’], var_name=’Date’, value_name=’Confirmed’)
# Rename columns
df_long.columns = [‘Province/State’, ‘Country/Region’, ‘Lat’, ‘Long’, ‘Date’, ‘Confirmed’]
# Convert Date column to datetime format
df_long[‘Date’] = pd.to_datetime(df_long[‘Date’])
# Sort by Country/Region and Date
df_long.sort_values(by=[‘Country/Region’, ‘Date’], inplace=True)
# Output as Org table format
print(df_long[[‘Country/Region’,’Province/State’,’Lat’,’Long’,’Date’,’Confirmed’]].to_csv(sep=’|’,
index=False,
line_terminator=’n’))
“`
执行以上代码后,我们得到了一个Org表格格式的数据文件。该文件中包含了全球各地区COVID-19疫情爆发后每日确诊人数的详细统计信息。
“`org
| Country/Region | Province/State | Lat | Long | Date | Confirmed |
|—————-+—————-+———-+———-+————+———–|
| Afghanistan | NaN | 33.0000| 65.0000| 2020-01-22 | 0 |
| Afghanistan | NaN | 33.0000| 65.0000| 2020-01-23 | 0 |
…
接下来,我们将使用Emacs Org Mode对这些数据进行可视化操作。首先,我们需要加载相关的插件和库:
“`emacs-lisp
(require ‘org)
(require ‘ob)
(require ‘ob-python)
(org-babel-do-load-languages
‘org-babel-load-languages ‘((python . t)))
然后,我们需要在Org Mode文档中添加一些代码块,以便于导入和处理数据。具体而言,我们需要添加以下几个代码块:
1. 导入数据:该代码块负责从外部文件中导入数据,并将其存储到Org表格中。
#+name: import-data
#+begin_src python :var data_file=”data.org”
# Load data from file
df = pd.read_csv(data_file, sep=’|’)
df[‘Date’] = pd.to_datetime(df[‘Date’])
print(df[[‘Country/Region’,’Province/State’,’Lat’,’Long’,’Date’,’Confirmed’]].to_csv(sep=’|’,
![使用Emacs Org Mode绘制折线图二——更进一步的数据可视化缩略图 使用Emacs Org Mode绘制折线图二——更进一步的数据可视化](https://www.72715.net/wp-content/uploads/2023/05/a52c4b8852df02cb3cc4a19edb43f9d3.png)
index=False,
line_terminator=’n’))
#+end_src
#+RESULTS: import-data
2. 过滤数据:该代码块负责从原始数据中过滤出指定地区的统计信息,并将其存储到新的Org表格中。
#+name: filter-data-by-region
#+begin_src python :var data=import-data :var region=””
# Load data from previous code block result (source block named “import-data”)
df = pd.read_csv(pd.compat.StringIO(data), sep=’|’)
# Filter by Region/Country and Date range (2020-01-22 to 2021-07-31)
if region:
df_filtered = df[(df[‘Country/Region’] == region) &
(df[‘Date’] >= ‘2020-01-22’) &
(df[‘Date’] <= '2021-07-31')]
else:
df_filtered = df[(df[‘Date’] >= ‘2020-01-22’) &
print(df_filtered[[‘Country/Region’,’Province/State’,’Lat’,’Long’,’Date’,’Confirmed’]].to_csv(sep=’|’,
index=False,
line_terminator=’n’))
#+RESULTS: filter-data-by-region
3. 绘制折线图:该代码块负责将过滤后的数据集绘制成折线图,并将其输出为图片文件。
#+name: plot-line-chart
#+begin_src python :var data=filter-data-by-region :var output_file=”chart.png” :results file graphics :file-ext png
import matplotlib.pyplot as plt
# Load data from previous code block result (source block named “filter-data-by-region”)
# Group by Date and aggregate Confirmed cases by sum for all regions/countries
df_grouped = df.groupby(‘Date’)[‘Confirmed’].sum()
# Create figure and axis objects with specified size and title
fig, ax = plt.subplots(figsize=(12, 6))
ax.set_title(‘COVID-19 Confirmed Cases by Date’)
# Plot line chart with x-axis as date and y-axis as confirmed cases, using blue color and solid line style.
ax.plot(df_grouped.index, df_grouped.values, color=’blue’, linestyle=’-‘)
# Save figure to file in PNG format at 300 DPI resolution.
plt.savefig(output_file, dpi=300)
plt.close()
output_file # Return the filename of the generated chart image.
#+RESULTS: plot-line-chart
以上代码块中,我们使用了pandas和matplotlib这两个Python库来进行数据处理和图形绘制。具体而言,我们首先从上一个代码块中的结果中导入过滤后的数据集,并按日期进行分组,然后对每个日期的确诊人数求和。最后,我们将分组后的结果绘制成折线图,并输出到指定文件。
最终,在执行以上代码块之后,我们得到了一张如下所示的COVID-19疫情趋势图:
![COVID-19 Confirmed Cases by Date](chart.png)
从图中可以看出,在2020年3月至4月期间全球疫情爆发达到高峰期,随着各国采取措施控制疫情传播速度逐渐减缓。然而,在2021年初以来由于新冠病毒变异等原因导致全球多地再次爆发新一轮疫情。
通过本文所介绍的Emacs Org Mode可视化操作技巧,我们可以非常方便地将任意复杂格式、大规模数据集处理并可视化呈现出来。这对于需要频繁处理和分析数据、生成报表或演