我真正想要做的是绘制直方图,y轴在对数刻度上。显然这是ggplot2
geom_histogram
的一个问题,因为底部的条形图是零,并且这个日志会给你带来麻烦。
我的解决方法是使用freqpoly geom
,并且更多或更少的工作。以下代码可以正常工作:
ggplot(zcoorddist) +
geom_freqpoly(aes(x=zcoord,y=..density..),binwidth = 0.001) +
scale_y_continuous(trans = 'log10')
问题在于,在我的数据的边缘,当在一个图中组合一堆这些freqpoly曲线时,我得到了几条花哨的垂直线,这些线在视觉上真的让你失望。我希望能够做的是在freqpoly曲线的每个顶点使用点,而不是连接它们的线。有没有办法轻松实现这一目标?
答案 0 :(得分:2)
获得所需图表的最简单方法是重新制作数据。然后你可以使用geom_point
。由于您没有提供示例,我使用geom_histogram
的标准示例来显示:
# load packages
require(ggplot2)
require(reshape)
# get data
data(movies)
movies <- movies[, c("title", "rating")]
# here's the equivalent of your plot
ggplot(movies) + geom_freqpoly(aes(x=rating, y=..density..), binwidth=.001) +
scale_y_continuous(trans = 'log10')
# recast the data
df1 <- recast(movies, value~., measure.var="rating")
names(df1) <- c("rating", "number")
# alternative way to recast data
df2 <- as.data.frame(table(movies$rating))
names(df2) <- c("rating", "number")
df2$rating <- as.numeric(as.character(df$rating))
# plot
p <- ggplot(df1, aes(x=rating)) + scale_y_continuous(trans="log10", name="density")
# with lines
p + geom_linerange(aes(ymax=number, ymin=.9))
# only points
p + geom_point(aes(y=number))