我有一个数据框,其中的行包含期刊出版物的标题,值,并指明它是normal
还是highlight
数据点。我希望绘图保留数据框的顺序。以下代码产生不均匀间隔的y轴。
require(ggplot2)
title <- c("COGNITION","MUTAT RES-DNA REPAIR","AM J PHYSIOL-CELL PH","AM J PHYSIOL-CELL PH","BLOOD",
"PNAS","BIOCHEM BIOPH RES CO","CLIN CANCER RES","BIOCHEM BIOPH RES CO","MOL THER" )
value <- c(-0.428, -0.637, -0.740, -0.782, -0.880, -1.974, -1.988, -2.029, -2.217, -2.242)
indicator <- c(rep("highlight",5), rep("normal",5))
df <- data.frame(title, value, indicator)
mycolors <- c("highlight" = "blue", "normal" = "red")
x_axis_range <- c((min(df$value)), (max(df$value)))
p <- ggplot(df, aes(x = title, y = value)) +
geom_point(aes(size=3, color=indicator)) +
coord_flip() +
scale_color_manual(values=mycolors) +
scale_y_continuous(limit=x_axis_range) +
# produces uneven spacing
scale_x_discrete(limits=df$title) +
theme(legend.position="none")
show(p)
我不知道为什么ggplot会在MOL THER
和CLIN CANCER RES
之间以及BLOOD
和AM J PHYSIOL-CELL PH
数据点之间添加额外的空间。当我将scale_x_discrete()
行更改为:
scale_x_discrete(limits=df$title.1) +
此间距变得均匀,但数据的顺序从下到上按字母顺序更改为标题。
为什么将.1
添加到limits=df$title
的末尾甚至是间距?如何保持这种均匀度,并且仍然能够使用order()
函数控制沿y轴的数据顺序?
答案 0 :(得分:2)
离散比例的间距不均匀,因为通过提供df$title
,您可以给出10个值,但在图中只有8个唯一值 - 因此已经使用的等级有两个空格。
当您提供scale_x_discrete(limits=df$title.1)
限制时,实际上会被忽略,因为您的数据中没有title.1
列且结果为NULL
要获得您需要的订单,请提供unique()
df$title
的转换为字符的值(以保持原始订单)
ggplot(df, aes(x = title, y = value)) +
geom_point(aes(size=3, color=indicator)) +
coord_flip() +
scale_color_manual(values=mycolors) +
scale_y_continuous(limit=x_axis_range) +
scale_x_discrete(limits=unique(as.character(df$title)) )+
theme(legend.position="none")