【问题标题】:How create Multiple Lines Chart with Python in a single graphic from different files?如何使用 Python 在来自不同文件的单个图形中创建多折线图?
【发布时间】:2019-11-04 05:07:12
【问题描述】:

我目前正在处理许多不同的时间序列 csv 文件。 其中一个文件包含不同小时的观测温度,其他 n 个文件包含来自 n 个不同预测器的预测温度。

我正在寻找 Python 代码来创建按时隙分组的多行图表(一条用于观测温度,另一条用于预测温度)。

我已经尝试了来自不同网站的许多解决方案,但是他们没有处理每行实际上是不同的 csv 文件的情况,而只处理同一 csv 文件中列中的每一行的情况

(这里只是网站上的一个例子)

# libraries
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

# Data
df=pd.DataFrame({'x': range(1,11), 'y1': np.random.randn(10), 'y2': np.random.randn(10)+range(1,11), 'y3': np.random.randn(10)+range(11,21) })

# multiple line plot
plt.plot( 'x', 'y1', data=df, marker='o', markerfacecolor='blue', markersize=12, color='skyblue', linewidth=4)
plt.plot( 'x', 'y2', data=df, marker='', color='olive', linewidth=2)
plt.plot( 'x', 'y3', data=df, marker='', color='olive', linewidth=2, linestyle='dashed', label="toto")
plt.legend()

所以,我正在寻找可以考虑不同 csv 文件并将每个文件与一行相关联以获得多折线图的 python 代码。

【问题讨论】:

标签: python pandas numpy matplotlib time-series


【解决方案1】:

嗯,首先你需要加载 csv 文件。

df_temp = pd.read_csv("temperatures.csv")
df_1 = pd.read_csv("predictors1.csv")
df_2 = pd.read_csv("predictors2.csv")
...

或者,如果您只需要 csv 中的一列,您可以执行以下操作。

# load the first whole csv
df = pd.read_csv("temperatures.csv")
df["y1"] = pd.read_csv("predictors1.csv")["needed_column"]
df["y2"] = pd.read_csv("predictors1.csv")["needed_column"]

那你自己的代码应该没问题,根据需要调整列名即可。

不过,在我进行测试时,我收到了一条关于数据列定义不明确的警告。执行以下操作之一以消除警告。

# If using the singe DataFrame version
plt.plot( df.x, df.y1 , marker='o', markerfacecolor='blue', markersize=12, color='skyblue', linewidth=4)
plt.plot( df.x, df.y2 , marker='', color='olive', linewidth=2)
plt.plot( df.x, df.y3 , marker='', color='olive', linewidth=2, linestyle='dashed', label="toto")

# If using the multiple DataFrames version.
plt.plot( df.x, df.y , marker='o', markerfacecolor='blue', markersize=12, color='skyblue', linewidth=4)
plt.plot( df_1.x, df_1.y , marker='', color='olive', linewidth=2)
plt.plot( df_2.x, df_2.y , marker='', color='olive', linewidth=2, linestyle='dashed', label="toto")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-28
    • 1970-01-01
    相关资源
    最近更新 更多