我是R下的初学者,我创建了一个图表,将温度叠加到沉淀物上,在ggplot下以geom_bar
作为选项。但是,我使用选项position = position_nudge (x = 0.4)
,因此图形不是彼此重叠。当我使用此选项时,它完全改变了计算方式。
例如,正如您将在下面看到的那样,我想在正确日期的条形图上找到一个条形图,直到31/30。你知道如何解决这个问题吗?提前感谢您的宝贵帮助。
下面是我的表格和我的代码。
SOUNAME year_month pre_type pre_value tem_type tem_value nb_species
WATERFORD (TYCOR) 2014-04 NONE 14 V_COLD 0 NA
WATERFORD (TYCOR) 2014-04 HEAVY 3 COLD 30 8
WATERFORD (TYCOR) 2014-04 LIGHT 7 HOT 0 NA
WATERFORD (TYCOR) 2014-04 MEDIUM 6 MEDIUM 0 NA
WATERFORD (TYCOR) 2014-05 NONE 15 V_COLD 0 NA
WATERFORD (TYCOR) 2014-05 HEAVY 3 COLD 31 17
WATERFORD (TYCOR) 2014-05 LIGHT 10 HOT 0 NA
WATERFORD (TYCOR) 2014-05 MEDIUM 3 MEDIUM 0 NA
WATERFORD (TYCOR) 2014-06 NONE 17 V_COLD 0 NA
WATERFORD (TYCOR) 2014-06 HEAVY 2 COLD 17 NA
WATERFORD (TYCOR) 2014-06 LIGHT 9 HOT 13 NA
WATERFORD (TYCOR) 2014-06 MEDIUM 2 MEDIUM 0 NA
ggplot(data = complet_w,
aes(x = complet_w$year_month,
y = complet_w$pre_value,
fill = complet_w$pre_type,
width=0.5),
stat = "identity") +
geom_bar(stat = "identity") +
xlab("date") +
ylab ("Number of days of precipitation") +
ggtitle("Precipitation per month") +
labs(fill = "Frequency") +
geom_bar(data=complet_w,
aes(x=complet_w$year_month,
y=complet_w$tem_value,
fill=complet_w$tem_type,
width=0.1),
stat = "identity",
position = position_nudge(x=0.4)) +
xlab("date") +
ylab("Number of days of temperature") +
ggtitle("Temperature per month") +
labs(fill = "Frequency")
以下是我的结果。我希望所有的酒吧都是30-31。有可能吗?
答案 0 :(得分:0)
您可以将position_nudge()
替换为position_stack()
。但要在一个图中得到2个图,你必须分别改变geom_bar()
的美学。
使用这样的代码:
#Change xval.yval and xlab to your requirement
ggplot(Dataname)+geom_bar(stat="identity",aes(x=as.numeric(xval)-0.25,y=yval))+
geom_bar(stat="identity",aes(x=as.numeric(xval)+0.25,y=yval))+
scale_x_discrete(labels= xlabs) #because you have renamed them using aes()
希望这有帮助!
答案 1 :(得分:0)
我记得你以前的问题。我想你正在寻找这样的东西:
library(dplyr)
library(ggplot2)
library(reshape2) #To use melt
View(TEMP_PREC_BIRR)
View(TEMP_BIRR)
write.csv(TEMP_PREC_BIRR,"Data1.csv")
write.csv(TEMP_BIRR,"Data2.csv")
Data1=melt(TEMP_PREC_BIRR,id.vars="year_month")
Data2=melt(TEMP_BIRR,id.vars="year_month")
Data=rbind(Data1,Data2)
Data=Data[!(Data$variable=="SOUNAME"),]
View(Data)
Data=read.csv("Data1.csv")
View(Data)
ggplot(Data,aes(x=year_month,y=Data$precipitation_value_,fill=Data$precipitation_type))+
geom_col()
ggplot(data = TEMP_PREC_BIRR, aes(x = TEMP_PREC_BIRR$year_month,
y = TEMP_PREC_BIRR$precipitation_value,
fill = TEMP_PREC_BIRR$precipitation_type,width=0.2)) +
geom_bar(aes(x = as.numeric(year_month)+0.25,
y = TEMP_PREC_BIRR$precipitation_value,
fill = TEMP_PREC_BIRR$precipitation_type),
stat = "identity",position = position_stack()) +
xlab("date") + ylab ("Number of days of precipitation") +
ggtitle("Precipitation per month - BIRR") + labs(fill = "Frequency")+
geom_bar(data=TEMP_BIRR,aes(x=as.numeric(TEMP_BIRR$year_month)-0.25,
y=TEMP_BIRR$temperature_value,
fill=TEMP_BIRR$temperature_type), stat = "identity",position = position_stack()) +
xlab("date") + ylab("Number of days of temperature") +
ggtitle("Temperature per month - BIRR") + labs(fill = "Frequency")+
theme(panel.background=element_blank())
答案 2 :(得分:0)
有一些事情不太适合ggplot
的设置:
ggtitle("Title 1") + ggtitle("Title 2")
,则只显示标题2,因为最后一次调用会覆盖之前的任何调用。与您对xlab
等的调用相同。geom_bar
个实例,但它们的功能基本相同。这通常表示您的数据应该是长格式,因此您可以将某些变量映射到您当前不是的美学。我恭敬地不同意以前的答案,这些答案会保留对geom_bar
的多次调用,并鼓励您根据ggplot
范例重塑数据。ggplot
之外,您应该在使用data =
时回头查看数据框的名称。它可能会导致奇怪的错误。因此x = TEMP_PREC_BIRR$year_month
应为x = year_month
。让您的数据变成长格式让我意识到了几件事:您目前正在将某些温度的天数与某些降水量的天数进行比较。例如,fill
正在接受重度降水和冷却温度,但这些并不具有可比性。你也有“中等”作为潜在的温度和降水水平,这意味着它们只会在fill
中被集中在一起。您需要相应地调整这些type
标签。
有两种类型的测量 - 降水和温度 - 你想要一起显示但不能直接比较是一个很好的分面用例,我在第一个例子中做了。
我通过gather
两次将数据转换为长形状,一次生成一列度量类型(pre或tem),一次得到一列值。由于跨度量类型重复类型的级别问题,我使用interaction
使类似“MEDIUM.pre”的类型与“MEDIUM.tem”区分开来。这仍然不太理想,因为你以相同的比例提供填充颜色,但采用不同类型的措施。
然后我调用facet_wrap(~ measure)
来显示两种度量类型相关但不相同。如果您在较大的数据集中有多个位置,则可以facet_grid(SOUNAME ~ measure)
。
library(tidyverse)
df <- structure(list(
SOUNAME = c("WATERFORD (TYCOR)", "WATERFORD (TYCOR)","WATERFORD (TYCOR)", "WATERFORD (TYCOR)", "WATERFORD (TYCOR)","WATERFORD (TYCOR)", "WATERFORD (TYCOR)", "WATERFORD (TYCOR)","WATERFORD (TYCOR)", "WATERFORD (TYCOR)", "WATERFORD (TYCOR)","WATERFORD (TYCOR)"),
year_month = c("2014-04", "2014-04", "2014-04","2014-04", "2014-05", "2014-05", "2014-05", "2014-05", "2014-06","2014-06", "2014-06", "2014-06"),
pre_type = c("NONE", "HEAVY","LIGHT", "MEDIUM", "NONE", "HEAVY", "LIGHT", "MEDIUM", "NONE","HEAVY", "LIGHT", "MEDIUM"),
pre_value = c(14L, 3L, 7L, 6L, 15L,3L, 10L, 3L, 17L, 2L, 9L, 2L),
tem_type = c("V_COLD", "COLD","HOT", "MEDIUM", "V_COLD", "COLD", "HOT", "MEDIUM", "V_COLD","COLD", "HOT", "MEDIUM"),
tem_value = c(0L, 30L, 0L, 0L, 0L,31L, 0L, 0L, 0L, 17L, 13L, 0L),
nb_species = c(NA, 8L, NA, NA,NA, 17L, NA, NA, NA, NA, NA, NA)),
.Names = c("SOUNAME", "year_month","pre_type", "pre_value", "tem_type", "tem_value", "nb_species"),
class = c("tbl_df", "tbl", "data.frame"),
row.names = c(NA,-12L))
df %>%
select(-nb_species) %>%
gather(key = measure, value = type, pre_type, tem_type) %>%
gather(key = pre_or_tem2, value = value, pre_value, tem_value) %>%
select(-pre_or_tem2) %>%
mutate(measure = str_extract(measure, "^[a-z]+")) %>%
mutate(type = interaction(type, measure)) %>%
ggplot(aes(x = year_month, y = value, fill = type)) +
geom_col(position = "stack") +
scale_fill_brewer(palette = "Set2") +
facet_wrap(~ measure)
在第二个例子中,我做了一些编辑。我注意到温度和降水的组合数量有限,所以我建立了一个两者之间相互作用的列;通过此分组加上year_month
,您可以总结降水量和温度相结合的天数。我将此交互列映射到填充,并删除了分面。同样,如果您在多个位置进行观察,则可以使用facet_wrap(~ SOUNAME)
。
df %>%
select(-nb_species) %>%
gather(key = measure, value = value, pre_value, tem_value) %>%
mutate(measure = str_extract(measure, "^[a-z]+")) %>%
mutate(pre_type = paste0(pre_type, "pre")) %>%
mutate(tem_type = paste0(tem_type, "tem")) %>%
select(-measure) %>%
mutate(type = interaction(pre_type, tem_type)) %>%
group_by(SOUNAME, year_month, type) %>%
summarise(value = sum(value)) %>%
ungroup() %>%
ggplot(aes(x = year_month, y = value, fill = type)) +
geom_col() +
scale_fill_brewer(palette = "Set2")
由reprex package(v0.2.0)创建于2018-05-19。
最后说明:我删除了nb_species
列只是为了简化我正在使用的数据,因为它没有出现在图中;我使用geom_col()
,相当于geom_bar(stat = "identity")
;我使用了Color Brewer调色板,因为它更容易区分大量的颜色。随意忽略所有这些步骤。