Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R ggplot2缩放x离散导致我的x轴消失?_R_Ggplot2 - Fatal编程技术网

R ggplot2缩放x离散导致我的x轴消失?

R ggplot2缩放x离散导致我的x轴消失?,r,ggplot2,R,Ggplot2,我有一个数据帧: dput(df) structure(list(row = c("(BSO,0)", "(BSO,1)", "(BSO,2)", "(BSO,3)", "(BSO,4)", "(BSO,5)", "(BSO,6)", "(CAR,0)", "(CAR,1)", "(CAR,2)", "(CAR,3)", "(CAR,4)", "(GMA,0)", "(GMA,1)", "(GMA,2)", "(GMA,3)", "(GMA,4)", "(GRA,0)", "(GRA,1

我有一个数据帧:

dput(df)

structure(list(row = c("(BSO,0)", "(BSO,1)", "(BSO,2)", "(BSO,3)", 
"(BSO,4)", "(BSO,5)", "(BSO,6)", "(CAR,0)", "(CAR,1)", "(CAR,2)", 
"(CAR,3)", "(CAR,4)", "(GMA,0)", "(GMA,1)", "(GMA,2)", "(GMA,3)", 
"(GMA,4)", "(GRA,0)", "(GRA,1)", "(GRA,2)", "(GRA,3)", "(GRS,7)", 
"(MAI,0)", "(MAI,1)", "(MAI,3)", "(MAI,5)", "(MAI,6)", "(MAI,7)", 
"(MAI,8)", "(ONI,0)", "(ONI,1)", "(ONI,4)", "(ONI,41)", "(ONI,45)", 
"(ONI,48)", "(ONI,49)", "(POT,0)", "(POT,1)", "(POT,2)", "(POT,3)", 
"(POT,5)", "(POT,6)", "(POT,8)", "(POT,9)", "(SBA,3)", "(SBA,5)", 
"(SBA,7)", "(SBA,8)", "(SBA,9)", "(SBT,0)", "(SBT,1)", "(SBT,2)", 
"(SBT,11)", "(SBT,14)", "(SBT,19)", "(SBT,32)", "(SBT,39)", "(SCR,1)", 
"(SCR,2)", "(SCR,3)", "(SWH,5)", "(SWH,7)", "(SWH,8)", "(SWH,9)", 
"(TLP,0)", "(TLP,6)", "(TLP,12)", "(TLP,45)", "(TLP,48)", "(TLP,49)", 
"(VEG,1)", "(VEG,2)", "(VEG,8)", "(WBA,8)", "(WCR,0)", "(WCR,1)", 
"(WWH,2)", "(WWH,3)", "(WWH,5)", "(WWH,7)", "(WWH,8)", "(WWH,9)", 
"(WWH,29)"), numofpics = c(1484, 1299, 1923, 3494, 2259, 934, 
1962, 209, 2218, 63, 16, 2178, 69, 165, 491, 147, 217, 114, 988, 
4518, 969, 26, 45, 479, 1102, 103, 69, 557, 144, 514, 1398, 59, 
494, 217, 610, 113, 872, 779, 152, 364, 20, 774, 995, 631, 23, 
145, 34, 66, 107, 448, 307, 17, 68, 757, 51, 47, 3787, 318, 578, 
431, 214, 167, 20, 24, 261, 378, 154, 58, 20, 70, 925, 22, 42, 
21, 35, 142, 703, 750, 76, 643, 278, 273, 27), numofparcels = c(49, 
40, 63, 94, 68, 32, 61, 8, 32, 2, 1, 30, 2, 7, 19, 6, 10, 5, 
27, 52, 27, 1, 2, 20, 25, 4, 3, 23, 5, 19, 25, 2, 17, 7, 20, 
5, 29, 27, 4, 11, 1, 20, 25, 21, 1, 5, 1, 3, 4, 16, 10, 1, 2, 
27, 1, 1, 34, 12, 15, 16, 8, 6, 1, 1, 10, 9, 6, 2, 1, 3, 12, 
1, 1, 1, 1, 5, 16, 19, 3, 19, 8, 10, 1), crop = c("BSO", "BSO", 
"BSO", "BSO", "BSO", "BSO", "BSO", "CAR", "CAR", "CAR", "CAR", 
"CAR", "GMA", "GMA", "GMA", "GMA", "GMA", "GRA", "GRA", "GRA", 
"GRA", "GRS", "MAI", "MAI", "MAI", "MAI", "MAI", "MAI", "MAI", 
"ONI", "ONI", "ONI", "ONI", "ONI", "ONI", "ONI", "POT", "POT", 
"POT", "POT", "POT", "POT", "POT", "POT", "SBA", "SBA", "SBA", 
"SBA", "SBA", "SBT", "SBT", "SBT", "SBT", "SBT", "SBT", "SBT", 
"SBT", "SCR", "SCR", "SCR", "SWH", "SWH", "SWH", "SWH", "TLP", 
"TLP", "TLP", "TLP", "TLP", "TLP", "VEG", "VEG", "VEG", "WBA", 
"WCR", "WCR", "WWH", "WWH", "WWH", "WWH", "WWH", "WWH", "WWH"
), bbch = c(0L, 1L, 2L, 3L, 4L, 5L, 6L, 0L, 1L, 2L, 3L, 4L, 0L, 
1L, 2L, 3L, 4L, 0L, 1L, 2L, 3L, 7L, 0L, 1L, 3L, 5L, 6L, 7L, 8L, 
0L, 1L, 4L, 41L, 45L, 48L, 49L, 0L, 1L, 2L, 3L, 5L, 6L, 8L, 9L, 
3L, 5L, 7L, 8L, 9L, 0L, 1L, 2L, 11L, 14L, 19L, 32L, 39L, 1L, 
2L, 3L, 5L, 7L, 8L, 9L, 0L, 6L, 12L, 45L, 48L, 49L, 1L, 2L, 8L, 
8L, 0L, 1L, 2L, 3L, 5L, 7L, 8L, 9L, 29L)), .Names = c("row", 
"numofpics", "numofparcels", "crop", "bbch"), row.names = c(NA, 
83L), class = "data.frame")
我希望用
ggplot
绘图,如下所示:

ggplot(data=df, aes(x=row, y=numofpics, fill = crop)) +
  geom_bar(stat='identity') +
  scale_x_discrete(breaks = unique(df$crop), labels = unique(df$crop))
为了生成这样的图形:

唯一的例外是图例标签显示在X轴上。为了我的生活,我不明白为什么他们反而消失了

虽然我的数据不是数字/连续的,但我已尝试将其转换为系数:

ggplot(data=df, aes(x=factor(row), y=numofpics, fill = factor(crop))) +
  geom_bar(stat='identity') +
  scale_x_discrete(breaks = unique(df$crop), labels = unique(df$crop))
这产生了同样的结果

我从另一个线程尝试了这个解决方案:

ggplot(data=df, aes(x=factor(row), y=numofpics, fill = factor(crop))) +
  geom_bar(stat='identity') +
  scale_x_discrete(limits=unique(df$crop)) 
这是谁干的


有人能给我点化一下吗?

根据你所描述的,看起来你可能想要这样的东西,但如果这不是你想要的,请告诉我

library(tidyverse)

ggplot(data=df, aes(x=str_extract(row, "[0-9]+"), y=numofpics, fill = crop)) +
  geom_bar(stat='identity') +
  facet_grid(. ~ crop, scales="free_x", space="free_x") +
  guides(fill=FALSE) +
  theme_bw() +
  theme(strip.text.x=element_text(angle=-90),
        axis.text.x=element_text(size=rel(0.8))) 


根据您描述的内容,您可能需要类似的产品,但如果您没有想到这一点,请告诉我

library(tidyverse)

ggplot(data=df, aes(x=str_extract(row, "[0-9]+"), y=numofpics, fill = crop)) +
  geom_bar(stat='identity') +
  facet_grid(. ~ crop, scales="free_x", space="free_x") +
  guides(fill=FALSE) +
  theme_bw() +
  theme(strip.text.x=element_text(angle=-90),
        axis.text.x=element_text(size=rel(0.8))) 


您正在设置
aes(x=row,
,这意味着x轴标签和断点将来自
row
列,但在
缩放x\u离散
中,您正在设置
断点=唯一(df$crop)
。因为
row
的值与
crop
的值不同(即,您设置的中断值在
行中不存在,轴标签将消失。如果您希望x轴标签为
裁剪的值,则设置
aes(x=裁剪,
)(您还可以删除对
缩放x_离散的调用).是的,我知道你的意思,但不,这不是我想做的。我想让图表如图所示,但将
crop
中的标签分别放在相同颜色的条簇下。我确信这是可能的,但我只是不确定语法是否正确。看看你的数据,可能
scale\x\u离散(labels=df$crop)
将在此处工作。通常,关键是确保
标签的顺序
向量与原始x轴标签的顺序完全对应。执行
缩放x_离散(labels=df$crop)
产生了我首先试图摆脱的结果,即整个
scale\u x\u discrete
业务-一个杂乱无章的x轴。
标签
向量的顺序不能完全对应于原始x轴数据,因为有83行,分为17个类别。我希望显示83行就像我上传的图表一样,但标签是基于它们所属的17个类别。你是说用
ggplot
scale\u x_discrete
?这是不可能的吗?你的问题一开始并不清楚,但看起来你想要的是一个跨越所有
行的
裁剪
标签与每个
裁剪一起使用的es
。一种方法是使用facetting。有关详细信息,请参阅我的答案,并让我知道这是否是您的想法。您正在设置
aes(x=行,
,意味着x轴标签和中断将来自
列,但在
缩放x_离散
中,您正在设置
中断=唯一(df$crop)
。因为
的值与
裁剪
的值不同(即,
中不存在您设置的中断值),轴标签消失。如果希望x轴标签为
裁剪
的值,则设置
aes(x=crop,
(您还可以删除对
缩放x\u离散
)的调用).是的,我知道你的意思,但不,这不是我想做的。我想让图表如图所示,但将
crop
中的标签分别放在相同颜色的条簇下。我确信这是可能的,但我只是不确定语法是否正确。看看你的数据,可能
scale\x\u离散(labels=df$crop)
将在此处工作。通常,关键是确保
标签的顺序
向量与原始x轴标签的顺序完全对应。执行
缩放x_离散(labels=df$crop)
产生了我首先试图摆脱的结果,即整个
scale\u x\u discrete
业务-一个杂乱无章的x轴。
标签
向量的顺序不能完全对应于原始x轴数据,因为有83行,分为17个类别。我希望显示83行就像我上传的图表一样,但标签是基于它们所属的17个类别。你是说用
ggplot
scale\u x_discrete
?这是不可能的吗?你的问题一开始并不清楚,但看起来你想要的是一个跨越所有
行的
裁剪
标签每种
作物都会有一个小切口。一种方法是使用小切口。请参阅我的答案了解详细信息,并让我知道这是否是您的想法。您好@eipi10,这几乎是理想的结果。出于某种原因,尽管您的解决方案会压扁一些作物仓,尤其是ONI、SBT和TLP。插入标签后,这一点变得非常明显通过
+geom_text(aes(标签=bbch),位置=position_道奇(宽度=0.9),vjust=-0.25,对每列
。知道为什么会发生这种数据挤压吗?对不起,这是我的错误。我没有解释代码中的
>9,因此只提取每个行号的第一位数字。结果是在同一个位置多个条被过度抽签(当您运行
geom_text
并在同一x轴位置看到多个
bbch
值时,就会发现这一点)。从
“[0-9]”更改为
“[0-9]+”
可以解决这一问题。在第二个图表中,我添加了
geom_text
行以进行说明,并切换到使用
因子(bbch)
对于
x
美学。aaaa狡猾的正则表达式,我必须学会如何一劳永逸地使用它。无论如何,先生,你是一位真正的大师!嗨@eipi10,这几乎是理想的结果。因此