我试着用pandas-bokeh包做一个面积图,代码如下:
import pandas as pd
import numpy as np
import pandas_bokeh
df = pd.read_excel('D:/Coding Practice/data/data_corona_usa.xlsx')
df = df.iloc[::-1].reset_index()
df['Cummulative Cases'] = df['cases'].cumsum()
df['date'] = df['dateRep'].dt.strftime('%D')
#to make it appear in your notebook
pandas_bokeh.output_notebook()
df.plot_bokeh(
kind='area',
x= 'dateRep',
y='Cummulative Cases',
xlabel = 'Date',
ylabel = 'Cummulative Cases',
hovertool_string= r'''<h1> Date: @{date} </h1>
<h2> Cummulative Cases: @{Cummulative Cases} </h2>''',
title='US Corona Cases (cummulative)',
hovertool=True,
fontsize_title=18,
logy=True,
stacked=False,
legend='top_left'
)但得到的面积图就像这张图。
图表没有覆盖该未知对角线下的区域。这个结果的出现是因为代码"logy = True“使得ytick使用了对数刻度。如果我删除这一行代码,面积图将显示为正常。
即便如此,我还是希望面积图在y轴上使用对数刻度。我怎么才能修复它?
发布于 2020-08-07 19:47:19
首先,你必须明白你的最小例子并不是一个工作的例子。您的本地路径使重现行为变得非常困难,因为没有人能够像您一样加载数据。
其次,我必须告诉你,如果你想使用pandas-bokeh,你的问题是无法解决的。这是因为面积图在这个模块中是用零初始化的,如果你使用一个对数y轴,零就不存在了,。原因是没有定义log(0)。您可以看到的是默认行为。
如果您愿意切换到bokeh本身,欢迎您遵循这个最小的示例:
下面是一些示例数据:
import pandas as pd
df = pd.DataFrame({'cases':range(100)}))
df['Cummulative Cases'] = df['cases'].cumsum()
df

现在我们想用简明易懂的语言重现你的观察结果。
from bokeh.io import show, output_notebook
from bokeh.plotting import figure
from bokeh.models import ColumnDataSource
output_notebook()
p = figure(x_range=(0, 100), y_range=(0.1,100000),y_axis_type="log")
source = ColumnDataSource(dict(x=df['cases'].values,
y1=df['Cummulative Cases'].values,
y2=[0]*df.shape[0]
)
)
p.varea(x='x', y1='y1', y2='y2', source=source)
show(p)

如果你设置了不同于零的基线,可能会像你想要的这个y2=[0.01]*df.shape[0]。

https://stackoverflow.com/questions/62969185
复制相似问题