【问题标题】:Matplotlib not plotting line between data pointsMatplotlib 没有在数据点之间绘制线
【发布时间】:2019-10-08 22:42:14
【问题描述】:

我有一组从 csv 绘制的降雪累积数据,如下所示:

我正在尝试根据 RAP 数据绘制 GFS 数据,RAP 将完美地绘制连接它们的点和线。但是,GFS 只会绘制为点数据:,而我一生都没有找到一种方法来绘制 GFS 数据,并用一条线连接这些点。这是我一直在使用的代码:

gfs = df['GFS']
rap = df['RAP']
fig2, ax2 = plt.subplots(figsize=(10,8))
ax2.plot(fh,gfs,'ob-') 
ax2.plot(fh,rap,marker='x')
ax2.tick_params(which='major',labelsize='12')
ax2.grid(which='major', color='#CCCCCC', linestyle='-')
plt.xticks(rotation='90')
plt.xlabel('Forecast Run')
plt.ylabel('Snowfall Accumulation (in.)')
plt.legend()

任何帮助和指导将不胜感激!

使用 ~np.isnan(): 编辑图表

【问题讨论】:

  • 您需要删除没有数据的点。
  • 请不要发布代码或数据的图像。将其复制并粘贴为文本,然后将其格式化为代码(选择它并输入ctrl-k)
  • 我已尝试使用 .ffill() 和 .dropna() 删除“NaN”值,但仅绘制点的结果仍然相同

标签: python pandas matplotlib


【解决方案1】:

要扩展@ImportanceOfBeingErnest 的答案,您可以像这样删除缺失值:

替换

ax2.plot(fh,gfs,'ob-') 

与

ax2.plot(fh[~np.isnan(gfs)],gfs[~np.isnan(gfs)],'ob-') 

更新:

上述方法可能会导致改变 x 轴的顺序。这是一个解决方法:

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

# make up some fake data
df = pd.DataFrame({"GFS": [np.nan, np.nan, 1, 2, np.nan, 
                          2, 3, np.nan, np.nan, 4], 
                    "RAP": [-2.45832646,  0.56266567, -0.4453474 , 
                            -0.85447845, -1.34830127,
                            -0.38113925, -0.41400397,  
                            np.nan, -0.78764545, -0.02807674]})
fh = np.array(["Fri 4 am", "Fri 6 am","Fri 8 am","Fri 10 am",
                "Fri 6 pm","Fri 10 pm","Sat 4 am","Sat 6 am",
                "Sat 8 am","100az 10 am"
                ])
gfs = df['GFS']
rap = df['RAP']


fig2, ax2 = plt.subplots(figsize=(10,8))
# workaround to set the order of xlabels
ax2.plot(fh, [np.nan]*len(fh)) 
# remove nan's  so that the points are connected
ax2.plot(fh[~np.isnan(gfs)], gfs[~np.isnan(gfs)], "ob-") 
ax2.plot(fh[~np.isnan(rap)],rap[~np.isnan(rap)],marker='x')
ax2.tick_params(which='major',labelsize='12')
ax2.grid(which='major', color='#CCCCCC', linestyle='-')
plt.xticks(rotation='90')
plt.xlabel('Forecast Run')
plt.ylabel('Snowfall Accumulation (in.)')

【讨论】:

  • 使用 ~np.isnan() 函数会在绘制 RAP 数据时导致类似上面新编辑的图表的问题
  • 我明白了。当您使用~np.isnan() 时,x 轴顺序会发生变化。我已经在更新中发布了针对该问题的解决方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-12-23
  • 2016-06-29
  • 2019-08-15
  • 2021-04-25
  • 1970-01-01
  • 2018-12-19
  • 1970-01-01
相关资源
最近更新 更多