我是个新手,想要制作我自己的子弹图(有点像http://bl.ocks.org/mbostock/4061961),它有标记/痕迹,用于在比较实际值与预期值时显示相关值的值。
以下是我的尝试:
q <- ggplot(data.frame(measure='',actual=25),aes(x=measure,y=actual))+
geom_bar(stat='identity')+
ylim(c(0,35))+
geom_hline(yintercept = 30,color='red')+
geom_text(y=30,label='Expected',angle=270,vjust=0)+
coord_flip()+
ylab('Num. of carrots')
q
q1 <- ggplotly(q) %>% add_markers()
q1
使用ggplotly
将其转换为情节时,文本看起来没有正确旋转,并且条形图中没有显示标记/迹线...这里的任何帮助都将非常感激。
最诚挚的问候,
HLM
答案 0 :(得分:2)
我认为这种情况并不支持旋转文本类型=&#34; scatter&#34; (这就是ggplotly如何解释你的geom_text
)。您可以从ggplot图中删除geom_text
行,然后使用注释将文本添加到图表中:
q1 <- ggplotly(q) %>% add_markers() %>%
layout(annotations = list(x = 30, y = 1, text = "Expected", textangle=270))
q1
问题的第二部分(如何在栏上获得悬停信息)稍微复杂一些。要获取悬停信息,我们可以直接使用plotly API创建条形
p.bars = plot_ly(data = data.frame(measure='', actual=25)) %>%
add_bars(y=~measure, x=~actual, orientation="h")
我们可以像这样添加文本注释
p.bars.text = p.bars %>%
layout(annotations = list(x = 30, y = 0, text = "Expected", textangle=270,
showarrow=F, xanchor="center"))
但问题是通过
在该图中添加一条线 p.bars.text %>% add_segments(x=30, xend=30, y=-0.5, yend=0.5)
给出错误
populate_categorical_axes(p)中的错误:无法显示离散和&amp;同一轴上的非离散数据
即。我们只能根据y的分类值指定线的y值。所以,例如我们可以做到
dat1 = data.frame(measure=letters[1:2], actual=c(25,20))
plot_ly(data = dat1) %>%
add_bars(y=~measure, x=~actual, orientation="h") %>%
layout(annotations = list(x = 29, y = 0, text = "Expected", textangle=270,
showarrow=F, xanchor="center")) %>%
add_segments(x=30, xend=30, y='a', yend='b')
给出以下内容,其中行与类别标签对齐,而不是与条的宽度
对齐目前我唯一能解决的问题是对类别使用数字轴,然后使用ticktext设置轴标签:
plot_ly(data = data.frame(measure=c(0,1), actual=c(25,20))) %>%
add_bars(y=~measure, x=~actual, orientation="h", showlegend=F) %>%
add_segments(x=30, xend=30, y=-0.4, yend=0.4, showlegend=F) %>%
layout(annotations = list(x = 29.5, y = 0, text = "Expected", textangle=270, showarrow=F, xanchor="center"),
yaxis = list(tickmode="array", tickvals=c(0,1), ticktext=c("", "") ))