问题描述
使用 plotnine 我试图绘制线段并在图的右侧注释每个线段。我正在关注 plotnine online documentation 上的示例,但是右侧的文本被截断了。如果我使用 Do $$
Begin
EXECUTE format(
'copY test FROM PROGRAM ''curl "https://example.com/events/123&start_date=%sT000000Z"''','20210331'
);
End
$$ ;
,我可以显示文本,但这不是我想要的,它会将文本移动到图中。我也尝试添加 ha='right'
但这只会扩大绘图的宽度而没有包含文本。
请注意,我不想手动指定 + theme(subplots_adjust={'right': 2})
位置,因为我的数据框中 x
值的范围会有所不同,并且我需要在脚本中绘制许多图。能够使用一些 plotnine 函数获得 x
并将它们传递到 xlimits
位置没问题,但我不知道如何做到这一点。
更好的是将文本放置在绘图区域之外。
我的问题是:有没有办法将 x
文本放置在图的主框外,放在右侧(以及左侧)的边距上?我怎样才能做到这一点?
geom_text()
当我在 from plotnine import *
from plotnine.data import mtcars
import numpy as np
mtcars_plot_df = mtcars[:20]
mtcars_plot_df.loc[:,'wt_l'] = mtcars_plot_df['wt'] - np.random.uniform(1)
mtcars_plot_df.loc[:,'wt_h'] = mtcars_plot_df['wt'] + np.random.uniform(1)
mtcars_plot_df.loc[:,'wt_str'] = mtcars_plot_df['wt'].round(2).astype(str) + ' (' + mtcars_plot_df['wt_l'].round(2).astype(str) + ' - ' + mtcars_plot_df['wt_h'].round(2).astype(str) + ')'
nrows = mtcars_plot_df.shape[0] * 0.2
(ggplot()
# Range strip
+ geom_segment(
mtcars_plot_df,aes(x='wt_l',xend='wt_h',y='name',yend='name'),size=1,color='red'
)
# Point markers
+ geom_point(
mtcars_plot_df,aes('wt','name'),size=1.5,stroke=0.7,color='blue'
)
# Range label
+ geom_text(
# mtcars_plot_df,=> This generates error
aes(x=np.inf,label="wt_str"),data = mtcars_plot_df,# => This gets rid of the error
size=8,ha='left'
)
+ theme(figure_size=(4,nrows*1)) # here you define the plot size
)
中使用 ha='right'
时,我得到一个图,如附图所示。如您所见,文本干扰了情节。当我使用 geom_text()
时,文本根本不可见。我希望文本位于情节区域之外,在情节右侧的白色区域中,类似于在情节左侧打印汽车名称的方式。
我在关注 plotnine 文档时遇到的一个附带问题是:如果我没有在 ha='left'
行之后将数据框指定为 data = mtcars_plot_df
,那么我会收到此错误:aes
.请参阅我在上面代码中的两个注释。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)