我有一个简单的pandas DataFrame,我想为此创建一个马赛克图.这是我的代码:
import pandas as pd
from statsmodels.graphics.mosaicplot import mosaic
mydata = pd.DataFrame({'id2': {64: 'Angelica',
65: 'DXW_UID', 66: 'casuid01',
67: 'casuid01', 68: 'EC93_uid',
69: 'EC93_uid', 70: 'EC93_uid',
60: 'DXW_UID', 61: 'AtmosFox',
62: 'DXW_UID', 63: 'DXW_UID'},
'id1': {64: 'TGP',
65: 'Retention01', 66: 'default',
67: 'default', 68: 'Musa_EC_9_3',
69: 'Musa_EC_9_3', 70: 'Musa_EC_9_3',
60: 'default', 61: 'default',
62: 'default', 63: 'default'}})
mydata
id1 id2
60 default DXW_UID
61 default AtmosFox
62 default DXW_UID
63 default DXW_UID
64 TGP Angelica
65 Retention01 DXW_UID
66 …Run Code Online (Sandbox Code Playgroud) data("HairEyeColor")
mosaic(HairEyeColor, shade = TRUE)
Run Code Online (Sandbox Code Playgroud)
是否有我可以使用的参数来更改上面结果图边缘的标签?比如我想把“男”改成“M”,“女”改成“F”,避免文字侵占,并在标题标签上做一些注释。
我在包的帮助页面中找不到任何关于编辑轴标签的信息。
我正在生成一个镶嵌图vcd::mosaic.但是我给出的因素的文本很长(切割它们不是一种选择,并且在很多情况下,介绍\n似乎令人生畏),所以文本中有重叠,我无法强制标签垂直于轴.
这就是我正在尝试的:
a <- data.frame(x=sample(LETTERS[1:4],16,replace = TRUE),
y=rep(paste("very long label here at number", 1:4, paste=" "), 4))
mosaic(y ~ x, data= a, las= 2)
Run Code Online (Sandbox Code Playgroud)
我也tryed par(las= 2)和par(las= 3),但这些都不是能够迫使他们垂直对齐(las= 2用效果很好mosaicplot,不过,这就像vcd::mosaic覆盖las无论是作为一个给定的参数或作为默认设置par.我也有打par(mar),但标签足够长,可以欺骗这种解决方法.
我该怎么做才能获得可读标签?
##########编辑添加:##########
我也试过这个,但无济于事:
mosaic(y ~ x, data= a, labeling_list= list(gp_text= gpar(las= 2)))
Run Code Online (Sandbox Code Playgroud)
和
mosaic(y ~ x, data= a, labeling_list= list(rot_labels = c(0,90,0,0)))
# Actually placed the "90" in the 4 positions …Run Code Online (Sandbox Code Playgroud) 我用 Matplotlib 制作了一个马赛克图,但是由于大量的数据点,该图被压缩了,单词相互重叠。我想增加情节的大小。我试过:
plt.figure(figsize=())
Run Code Online (Sandbox Code Playgroud)
它没有用。
这是我的代码:
from statsmodels.graphics.mosaicplot import mosaic
import matplotlib.pyplot as plt
plt.figure(figsize=(200,10)) #does not work
plt.rcParams['font.size'] = 10.0
mosaic(plants_sub, ['Symbol', 'Family'], gap=0.1);
Run Code Online (Sandbox Code Playgroud)
输出:
出于某种原因,我无法让 xlab 和 ylab 在 vcd 包中的马赛克图中工作。
我试过:
mosaic(~Sex +Survived,
data=Titanic,
shade=T,
legend=T,
main="myplot",
labeling_args=list(abbreviate = c( Sex=2, Survived=1)) ,
ylab="Gender",
xlab="survival")
Run Code Online (Sandbox Code Playgroud)
这分别标记轴“性别”和“幸存”。
mosaic(margin.table(Titanic, c(2,4)),
ylab="Gender",
xlab="survival",
shade=T, legend=T,
main="myplot",
labeling_args=list(abbreviate = c( Sex=2, Survived=1)))
Run Code Online (Sandbox Code Playgroud)
这也分别标记了“性别”和“幸存”轴。
mosaicplot(margin.table(Titanic, c(2,4)),
shade=T,
legend=T,
main="myplot",
labeling_args=list(abbreviate = c(Sex=2, Survived=1)),
ylab="Gender",
xlab="survival")
Run Code Online (Sandbox Code Playgroud)
这正确地标记了轴,但忽略了“labeling_args”
有没有人有什么建议?
我的大部分图都是用 ggplot2 制作的,ggsave 命令用一行将它们保存在它们应该在的位置。但是,使用 vcd 包的马赛克图最适合我的数据。问题:我没有收到包含以下代码的错误消息。R 说它已经保存了我的情节,但被保存的情节是我创建的最后一个 ggplot 图,而不是我想要的马赛克图。当然我可以在 RStudio 中手动保存,但我很确定有更好的方法。有任何想法吗?
Onlyaround <- subset(prepData, preposition=="around")
attach(Onlyaround)
mytable <- table(exp_group, session, result)
ftable(mytable)
mosaic(mytable, shade=TRUE, legend=TRUE, main = "Around by Group")
margin.table(mytable)
ggsave("pics/around_mosaic.png")
detach(Onlyaround)
Run Code Online (Sandbox Code Playgroud)