plotnine 在错误的地方显示离散值
plotnine shows discrete values in the wrong place
我正在尝试制作一个图形,每当列具有特定(离散)值时,在 x 轴上显示时间,在 y 轴上显示点。
下面是一些示例数据:
dat = pd.DataFrame({
'time': [0, 15, 30],
'A': [np.nan, np.nan, 'A'],
'B': ['B', 'B', np.nan],
})
现在我试图在第 'A' 列显示字母 'A' 时在 'A' 列中显示一个点。我试过这个:
(gg.ggplot(dat, gg.aes('time', 'A'))
+ gg.geom_point()
+ gg.scale_y_discrete(name='', limits=list('A'))
)
但没有显示任何内容:
link to figure
然后,我更改了绘图的 y 限制:
(gg.ggplot(dat, gg.aes('time'))
+ gg.geom_point(gg.aes(y='A'))
+ gg.scale_y_discrete(name='', limits=list('ABCD'))
)
现在,我想要的点出现了:第 'A' 列在时间 30 处显示值 'A',确实,那里有一个点。但非常奇怪的是,该图还在 'D' 列中显示了两个点:
link to figure
我尝试了一些限制和列名,只要限制包含少于 4 个值,就根本不会显示任何点;在那之后,我想要的点出现了,但 NaN 值也被绘制在极限的最后一个字母的列中。
有人知道这里发生了什么吗?你能帮我做这个数字吗?
您需要做的第一件事是重塑数据框,以便堆叠变量和值,然后删除缺失值。
import pandas as pd
import numpy as np
from plotnine import *
df = pd.DataFrame({
'time': [0, 15, 30],
'A': [np.nan, np.nan, 'A'],
'B': ['B', 'B', np.nan],
})
df = pd.melt(df, id_vars=['time'], value_vars=['A', 'B'])
df.dropna(inplace=True)
p = (ggplot(df, aes(x='time', y='value'))
+ theme_classic()
+ geom_point()
+ labs(y=None)
)
我正在尝试制作一个图形,每当列具有特定(离散)值时,在 x 轴上显示时间,在 y 轴上显示点。
下面是一些示例数据:
dat = pd.DataFrame({
'time': [0, 15, 30],
'A': [np.nan, np.nan, 'A'],
'B': ['B', 'B', np.nan],
})
现在我试图在第 'A' 列显示字母 'A' 时在 'A' 列中显示一个点。我试过这个:
(gg.ggplot(dat, gg.aes('time', 'A'))
+ gg.geom_point()
+ gg.scale_y_discrete(name='', limits=list('A'))
)
但没有显示任何内容: link to figure
然后,我更改了绘图的 y 限制:
(gg.ggplot(dat, gg.aes('time'))
+ gg.geom_point(gg.aes(y='A'))
+ gg.scale_y_discrete(name='', limits=list('ABCD'))
)
现在,我想要的点出现了:第 'A' 列在时间 30 处显示值 'A',确实,那里有一个点。但非常奇怪的是,该图还在 'D' 列中显示了两个点: link to figure
我尝试了一些限制和列名,只要限制包含少于 4 个值,就根本不会显示任何点;在那之后,我想要的点出现了,但 NaN 值也被绘制在极限的最后一个字母的列中。
有人知道这里发生了什么吗?你能帮我做这个数字吗?
您需要做的第一件事是重塑数据框,以便堆叠变量和值,然后删除缺失值。
import pandas as pd
import numpy as np
from plotnine import *
df = pd.DataFrame({
'time': [0, 15, 30],
'A': [np.nan, np.nan, 'A'],
'B': ['B', 'B', np.nan],
})
df = pd.melt(df, id_vars=['time'], value_vars=['A', 'B'])
df.dropna(inplace=True)
p = (ggplot(df, aes(x='time', y='value'))
+ theme_classic()
+ geom_point()
+ labs(y=None)
)