我想使用facet_grid将一些条形图绘制在彼此之上:
library(ggplot2)
df <- group_by(mpg, manufacturer) %>%
summarise(cty = mean(cty), hwy = mean(hwy)) %>%
ungroup()
df <- melt(df, id.vars = "manufacturer")
ggplot() +
geom_bar(data =df, aes(x = variable, y = value), stat = "identity") +
facet_grid(manufacturer ~ ., switch = "y")
Run Code Online (Sandbox Code Playgroud)
我使用switch参数ggplot2::facet_grid()来让facet标签显示在y轴而不是每个facet的顶部.问题是刻面标签是垂直绘制的,因此会被裁剪.有没有办法水平绘制facet -labels?到目前为止,我发现的所有问题仅与旋转x轴标签有关,而不是与刻面标签有关.
I want to draw lines between a faceted ggplot. The main goal is to connect those measurements with a line which we want to test against. So basically I want to insert some kind of significance bars inside and between the facets of a ggplot boxplot (or any kind of plot for that matter).
I know that there is ggsignif package which does this for all non faceted plots.
There are answers which try to circumvent this …
我遇到了困难ggplot2.我阅读了大部分相关帖子,尝试了一些但没有找到任何真正的解决方案.
我想在我的标签数学表达式facet_grids用ggplot2.
qplot(day, activity, data=a) +xlab(expression("100 µg "*.L^"-1"*""))::这很好用.我该如何处理facet_labels?我可以设置级别并重命名标签因子,但不考虑表达式,例如:
levels(a$group) <- c("control", expression("100 µg "*.L^"-1"*""))
qplot(…, facets=~group)
结果:
方面1的标签写在图表上:控制
方面2的标签写在图表上:"100μg" .L ^" - 1" ""......
我不希望这样.
我不想使用,facet_grid(.~group, labeller=label_bquote(…))因为我不希望我的所有标签都遵循相同的表达方式.我想手动逐个编辑标签...我尝试用bquote(…)而不是expression(…)但同样的坏结果发生了
有人对此有任何线索吗?
一个例子:我定义了一个数据帧:
activity<- as.numeric(c("44","41","48","43","42","45","44","39", "47", "68", "88", "57"))
group<-c("first","first","first","first","first","first",
"second","second","second","second","second","second")
day<- c("0", "0", "0", "20","20", "20","0", "0", "0", "20","20", "20" )
a<-data.frame(activity, group, day)
Run Code Online (Sandbox Code Playgroud)
我的情节:
require (ggplot2)
Run Code Online (Sandbox Code Playgroud)
qplot(day, activity, facets=.~group, data=a, ylim=c(25,90))
我想更改构面标签和y轴的名称:
levels(a$group)<- c("control", …Run Code Online (Sandbox Code Playgroud) 假设我有以下数据框:
# Set seed for RNG
set.seed(33550336)
# Create toy data frame
loc_x <- c(a = 1, b = 2, c = 3)
loc_y <- c(a = 3, b = 2, c = 1)
scaling <- c(temp = 100, sal = 10, chl = 1)
df <- expand.grid(loc_name = letters[1:3],
variables = c("temp", "sal", "chl"),
season = c("spring", "autumn")) %>%
mutate(loc_x = loc_x[loc_name],
loc_y = loc_y[loc_name],
value = runif(nrow(.)),
value = value * scaling[variables])
Run Code Online (Sandbox Code Playgroud)
看起来像,
# > head(df)
# loc_name …Run Code Online (Sandbox Code Playgroud) Seaborn 文档对这些差异非常不清楚,我无法弄清楚它们。看起来它们的功能即使不完全相同,也非常相似。
\n\nseaborn.FacetGrid.map_dataframe
\n具体有什么区别,什么时候使用其中一种?关于seaborn的文档map_dataframe说“与map方法不同,这里使用的函数必须\xe2\x80\x9cunderstand\xe2\x80\x9d Pandas对象”。这是map_dataframe 与map 文档中的唯一区别。如果不是数据帧,那么什么样的对象会被发送到地图中的函数,为什么它很重要?我也不太理解color目标函数必须接受的论点。该论证中包含哪些信息color?
我无法在 Seaborn/Matplotlib 中旋转我的 xlabel。我尝试了很多不同的解决方案,但无法修复它。我在 stackoverflow 上看到了很多相关问题,但它们对我不起作用。
我当前的绘图如下所示,但我希望 xlabel 旋转 90 度。
@staticmethod
def plotPrestasjon(plot):
sns.set(style="darkgrid")
ax = sns.catplot(x="COURSE", y="FINISH", hue="COURSE",
col="BIB#", data=plot, s=9, palette="Set2")
ax.set(xlabel='COURSES', ylabel='FINISH (sec)')
plt.show()
Run Code Online (Sandbox Code Playgroud)
我努力了:
ax.set_xticklabels(ax.get_xticklabels(), rotation=90)
Run Code Online (Sandbox Code Playgroud)
但这无法生成情节。我有什么想法可以解决它吗?
假设我有一个像这样的多面 ggplot:
data(iris)
ggplot(iris, aes(x = Petal.Width, y = Sepal.Length)) +
facet_grid(. ~ Species) +
geom_point()
Run Code Online (Sandbox Code Playgroud)
题:
是否可以仅将第一个方面标签(“setosa”)与左侧对齐,但将其他方面保持在中央?
我对直接没有任何运气ggplot,所以我尝试转换为 gtable(下面的代码),我可以看到我可能需要修改的元素是 tableGrb #13 - strip-t-1,但我不确定怎么做。我尝试将gt$layout$l和gt$layout$r值更改为 4(原为 5),但这会将标题完全移出构面。
pl <- ggplot(iris, aes(x = Petal.Width, y = Sepal.Length)) +
facet_grid(. ~ Species) +
geom_point()
gt <- ggplotGrob(pl)
gt$layout[gt$layout$name == 'strip-t-1', c('l', 'r')] <- c(4, 4) # my attempt
grid.newpage()
grid.draw(gt)
Run Code Online (Sandbox Code Playgroud)
有谁知道这是否可能?
我想在多面图的外部周围有一个边框,但没有将图内的面板分开的线。问题是panel.border在构面上的每个面板周围绘制边框,而没有选择在整个图上仅具有边框。或者,您可以将内部分隔线设置为“白色”,但将外部边界保持为“黑色”。
这是我的代码:
mtcars
mtcars$manufacturer=rownames(mtcars)
ggplot(mtcars, aes(x=manufacturer, y=mpg,fill=factor(gear,levels=c("3","4","5"))))+
geom_bar(stat="identity",position="dodge",colour="black")+
facet_grid(~cyl,scales = "free_x",space = "free_x",) +
theme(axis.text.x = element_text(angle = 45,size=12,colour="Black",vjust=1,hjust=1),
strip.background = element_blank(),
strip.placement = "inside",
strip.text = element_text(size=15),
legend.position=c(0.9,0.8),
legend.title=element_blank(),
legend.text=element_text(size=15),
panel.spacing = unit(0.2, "lines"),
panel.background=element_rect(fill="white"),
panel.border=element_rect(colour="black",size=1),
panel.grid.major = element_blank(),
panel.grid.minor = element_blank())
Run Code Online (Sandbox Code Playgroud)
结果:带有内部边界的多面图
所需的输出(用油漆编辑):无内线的多面图
我想要从中删除内部线条的实际数据图如下所示:
A通过以下方式在Seaborn中制作了Facetgrid的箱线图
# Import the dataset
tips = sns.load_dataset("tips")
# Plot using Facegrid, separated by smoke
plt.style.use('ggplot')
g = sns.FacetGrid(tips, col="smoker", size=5, aspect=1.5)
g.map(sns.boxplot, "sex", "total_bill", palette='viridis', order=['Male', 'Female'])
plt.show()
Run Code Online (Sandbox Code Playgroud)
我现在想在每个图中绘制不同的水平线。例如,一条水平线(坐标为(0,10))仅在左侧图中,而另一条水平线(坐标为(0,30))仅在右侧图中。
我该怎么做呢?
是否有一种规范的方法可以在其中添加方面标题facet_grid?或者一种特定行标签的方法facet_wrap?(没有 geom_text, geom_label, 或 grob 操作。)
考虑:
dat <- data.frame(rowInd = paste0("R", c(1, 2, 2, 3, 3, 3)), colInd = paste0("C", c(1, 1, 2, 1, 2, 3)),
facetName = c("1-10", "60-70", "80-90", "100-110", "120-130", "140-150"), val=1:6)
dat
# rowInd colInd facetName val
# 1 R1 C1 1-10 1
# 2 R2 C1 60-70 2
# 3 R2 C2 80-90 3
# 4 R3 C1 100-110 4
# 5 R3 C2 120-130 5
# …Run Code Online (Sandbox Code Playgroud) facet-grid ×10
ggplot2 ×7
r ×7
python ×3
seaborn ×3
plot ×2
border ×1
catplot ×1
facet ×1
facet-wrap ×1
ggtext ×1
gtable ×1
matplotlib ×1