使用散景(pyspark dataframe)显示年逐年线图的问题



当我尝试使用散景从pyspark数据框显示线条图时,我遇到了一个问题,它被成功显示,但它显示了我没有预料到的。问题是一些线形图的点没有按年顺序连接。

之前我尝试使用orderBy:

对源数据帧进行排序
# Join df_max, and df_avg to df_quake_freq    
df_quake_freq = df_quake_freq.join(df_avg, ['Year']).join(df_max, ['Year'])    
df_quake_freq = df_quake_freq.orderBy(asc('Year'))    
df_quake_freq.show(5)

,输出为:线图的数据源

这是用于绘图的代码:

# Create a magnitude plot
def plotMagnitude():
# Load the datasource
cds = ColumnDataSource(data=dict(
yrs = df_quake_freq['Year'].values.tolist(),
avg_mag = df_quake_freq['Avg_Magnitude'].round(1).values.tolist(),
max_mag = df_quake_freq['Max_Magnitude'].values.tolist()
))

# Tooltip
TOOLTIPS = [
('Year', ' @yrs'),
('Average Magnitude', ' @avg_mag'),
('Maximum Magnitude', ' @max_mag')
]

# Create the figure
mp = figure(title='Maximum and Average Magnitude by Year',
plot_width=1150, plot_height=400,
x_axis_label='Years',
y_axis_label='Magnitude',
x_minor_ticks=2,
y_range=(5, df_quake_freq['Max_Magnitude'].max() + 1),
toolbar_location=None,
tooltips=TOOLTIPS)

# Max Magnitude
mp.line(x='yrs', y='max_mag', color='#cc0000', line_width=2, legend='Max Magnitude', source=cds)
mp.circle(x='yrs', y='max_mag', color='#cc0000', size=8, fill_color='#cc0000', source=cds)

# Average Magnitude 
mp.line(x='yrs', y='avg_mag', color='yellow', line_width=2, legend='Avg Magnitude', source=cds)
mp.circle(x='yrs', y='avg_mag', color='yellow', size=8, fill_color='yellow', source=cds)

mp = style(mp)

show(mp)

return mp
plotMagnitude()

输出如下:线情节

我们可以从图中看到,有些点不是按顺序连接的,例如1965-1967-1966

我的问题解决了,点不排序的原因是plotMagnitude函数依赖于全局变量,所以要处理这个问题,我把sort.values()里面的函数。语法如下:

def plotMagnitude():
# Load the datasource
cds = ColumnDataSource(data=dict(
yrs = df_quake_freq['Year'].sort_values().values.tolist(),
avg_mag = df_quake_freq['Avg_Magnitude'].round(1).values.tolist(),
max_mag = df_quake_freq['Max_Magnitude'].values.tolist()

相关内容

  • 没有找到相关文章

最新更新