我想调整条形图上的文字.
我试图调整hjust/vjust以显示我喜欢它但似乎它不能正常工作.
ggplot(data) +
geom_bar(aes(name, count,
fill = week), stat='identity', position = 'dodge') +
geom_text(aes(name,count,
label=count),hjust=0.5, vjust=3, size=2,
position = position_dodge(width = 1)) +
coord_flip()
Run Code Online (Sandbox Code Playgroud)
所以我希望数字位于每个条形图上,中间位于右边缘,因此它的可读性不会像最后一部分那样重叠.
与此问题类似,我想更改图例中的默认"a",而不是完全删除它,我想用标签本身替换它.也就是说,图例的第一行应该有一个标有"se"的彩色图标,右边是全名"setosa".
iris$abbrev = substr( iris$Species, 1, 2 )
ggplot(data = iris, aes(x = Sepal.Length, y=Sepal.Width, shape =
Species, colour = Species)) + geom_text(aes(label = abbrev))
Run Code Online (Sandbox Code Playgroud)
这实际上是两个问题中的一个(不确定是否违反SO规则,但无论如何).
第一个问题是我如何强迫一个geom_text
适合geom_bar
?(动态根据绘制的值)
环顾四周,我发现的解决方案正在改变标签的大小.这当然有效,但不适用于所有情况.您可以更改特定绘图的大小以使文本适合条形,但是当数据更改时,您可能需要再次手动更改文本的大小.我现实生活中的问题是,我需要为不断变化的数据(每日)生成相同的图,所以我无法真正手动调整每个图的大小.
我尝试将标签的大小设置为数据的函数.它有点工作,不完美,但适用于许多情况.
但这是另一个问题,即使标签适合栏内,重新调整情节会使一切变得混乱.调查一下,我也在ggplot文档中找到了
标签确实有高度和宽度,但它们是物理单位,而不是数据单位.它们在该绘图上占用的空间量在数据单位中不是恒定的:当您调整绘图大小时,标签保持相同的大小,但轴的大小会发生变化.
这让我想到了第二个问题:是否可以更改此默认行为并让/使图表调整大小?
还让我提炼我的第一个问题.是否可以强制a geom_text
适合a geom_bar
,使用物理单位和数据单元之间的聪明关系动态设置文本的大小?
所以,为了遵循良好的做法,这是我可重复的例子:
set.seed(1234567)
data_gd <- data.frame(x = letters[1:5],
y = runif(5, 100, 99999))
ggplot(data = data_gd,
mapping = aes(x = x, y = y, fill = x)) +
geom_bar(stat = "identity") +
geom_text(mapping = aes(label = y, y = y/2))
Run Code Online (Sandbox Code Playgroud)
此代码生成此图:
如果我只是简单地调整绘图大小," 标签保持相同的大小,但轴的大小会发生变化 ",从而使标签适合条形图(现在标签甚至可能太小).
所以,这是我的第二个问题.标签调整大小并保持纵横比相对于条形图会很好.任何想法如何实现这一点或是否有可能?
好的,但回到如何在条形图中标注标签,最简单的解决方案是设置标签的大小.
ggplot(data = data_gd,
mapping = aes(x = x, y = y, fill = x)) +
geom_bar(stat = …
Run Code Online (Sandbox Code Playgroud) 在图中,是否可以略微抖动状态缩写标签,以便它们不重叠?如果我使用check_overlap = TRUE
,那么它会删除一些重叠的观察,我不希望这样.我也不想要geom_label_repel
,因为它有标签伸出并穿过我所包含的45度线(我不想发生)
这是我的代码的相关部分供参考:
ggplot(df, aes(x = huff_margin_dem, y = margin16dem_state, label = abbrev)) +
geom_abline(intercept = 0) +
geom_text(fontface = "bold")
Run Code Online (Sandbox Code Playgroud) 我想将[r]因子变量的频率分布绘制为条形图,其中条形表示因子水平的频率计数.我使用ggplot2来做到这一点并没有问题.
我无法弄清楚的是如何将频率计数标签添加到条形图中的条形图上.我尝试过的语法如下:
ggplot(data, aes(x = factorvar)) + geom_bar(fill = "somecolor") + geom_text(aes(y = ???))
Run Code Online (Sandbox Code Playgroud)
我想我已经彻底搜索了stackoverflow和W.Chang的"R Graphics Cookbook",但我找不到任何具体的答案,我应该在上面的geom_text()的美学中与"y"匹配.我尝试了一些变体,如:(y = ..count ..),但它不起作用.
我将不胜感激任何帮助.谢谢...
我想将相应的值标签放在geom_col
每个条形段中间的堆积条形图中.
但是,我天真的尝试失败了.
library(ggplot2) # Version: ggplot2 2.2
dta <- data.frame(group = c("A","A","A",
"B","B","B"),
sector = c("x","y","z",
"x","y","z"),
value = c(10,20,70,
30,20,50))
ggplot(data = dta) +
geom_col(aes(x = group, y = value, fill = sector)) +
geom_text(position="stack",
aes(x = group, y = value, label = value))
Run Code Online (Sandbox Code Playgroud)
显然,设置y=value/2
为geom_text
不帮助,无论是.此外,文本的顺序错误(反向).
任何(优雅的)想法如何解决这个问题?
我生成的几个地块,其中数据可能有不同x
和y
范围。我希望在所有图中放置一个文本注释,相对于 plot area完全相同的位置。
第一标绘,其中I添加具有文本的实施例annotate
和位置将其与x
和y
在所述数据单元:
library(tidyverse)
ggplot(mpg) +
geom_point(aes(displ, hwy)) +
annotate("text", x = 6, y = 20, label = "example watermark", size = 8) +
ggsave(filename = "mpg.jpg", width = 10, height = 9, dpi = 60)
Run Code Online (Sandbox Code Playgroud)
然后根据另一个数据集创建第二个图,其中x
和y
范围与第一个图不同。
在没有反复试验的情况下,将文本放置在相对于绘图区域完全相同的位置的最佳方法是什么?
ggplot(iris) +
geom_point(aes(Petal.Width, Petal.Length)) +
# I don't want to hardcode x and y in annotate
# annotate("text", x = 6, y = …
Run Code Online (Sandbox Code Playgroud) 我正在绘制一个堆积条形图并用于geom_text
插入每个堆栈的值.我面临的困难是一些堆栈非常小/窄,因此两个堆栈的文本相互重叠,因此不是很可读.我想以一种方式调整文本定位,例如文本位置在每个堆栈之间hjust == 1
和hjust == -1
每个堆栈之间交替,以便不会有重叠(或任何其他方法将导致可读文本).
下面是目前我在做什么的例子(dput
中mydf
提供如下):
library(ggplot2)
ggplot(mydf, aes(x=variable, y = value, fill = Category)) +
geom_bar(stat="identity") +
geom_text(aes(label = value, y = pos-(value/2)), size = 3)
Run Code Online (Sandbox Code Playgroud)
到目前为止我尝试的是:
使用position = position_dodge(width = 0.5)
和position = position_jitter(h =0.5, w = 0.5)
,但没有造成什么,我要怎样做.
我的第一个想法是定义hjust = c(1,-1)
希望它将被回收并且文本将在它们之间交替hjust == 1
,hjust == -1
但它会导致错误消息:
Error: Incompatible lengths for set aesthetics: size, hjust
Run Code Online (Sandbox Code Playgroud)
我也尝试过定义,size = c(3,3,3,3,3,3,3,3,3), hjust = …
我正在使用geom_bar在ggplot2中生成一些基本的条形图.我希望在每个条形图上方以相同的颜色列出数字,我使用的是geom_text.我用填充棒scale_fill_manual(values = alpha(c("#000000", "#FF5733")))
.我遇到的问题是条形图上方的文字没有更改为自定义着色.保留默认的R颜色.
library(ggplot2)
Area <- c("Option1", "Option2", "Option3")
Count <- c(193, 56, 4,240, 10, 25)
Type <- c("car", "car", "car", "bike", "bike", "bike")
p <- data.frame(Area, Count, Type)
ggplot(p, aes(x=Area, y=Count, color=Type)) +
geom_bar(stat="identity", position="dodge", aes(fill=Type), color="black") +
scale_fill_manual(values = alpha(c("#000000", "#FF5733"))) +
geom_text(aes(label=Count), position=position_dodge(width = 0.9), vjust=-0.40)
Run Code Online (Sandbox Code Playgroud)
我试过以下无济于事:
有一次,我决定如果我可以将文本设置为黑色,我会接受并继续前进,但是当我这样做时,定位失败并将两个文本集中在一个"选项"而不是将文本保留在各自的文本上酒吧.
geom_text(aes(label = Count),color ="black",position = position_dodge(width = 0.9),vjust = -0.40)
然后我尝试了这个:
geom_text(aes(label = Count,color = c("#000000","#FF5733")),position = position_dodge(width = 0.9),vjust = -0.40)
我通过此调整得到以下错误:错误:美学必须是长度1或与数据(6)相同:标签,颜色,x,y
我想这是因为有6个酒吧,但只指定了2种颜色.然而,当我再添加4次颜色时,它只是从我想要的更远.
我试图发布图片,但我还没有足够的分数!抱歉! …
我正在寻找一种方法来标记带百分比的堆积条形图,而y轴显示原始计数(使用ggplot).这是没有标签的情节的MWE:
library(ggplot2)
df <- as.data.frame(matrix(nrow = 7, ncol= 3,
data = c("ID1", "ID2", "ID3", "ID4", "ID5", "ID6", "ID7",
"north", "north", "north", "north", "south", "south", "south",
"A", "B", "B", "C", "A", "A", "C"),
byrow = FALSE))
colnames(df) <- c("ID", "region", "species")
p <- ggplot(df, aes(x = region, fill = species))
p + geom_bar()
Run Code Online (Sandbox Code Playgroud)
我有一个更大的桌子,R很好地计算每个地区的不同物种.现在,我想展示原始计数值(最好在y轴上)和百分比(作为标签)来比较区域之间物种的比例.
我试了很多东西,geom_text()
但我认为与其他问题(例如这一个)的主要区别在于
任何帮助深表感谢!!