避免直方图(格子)中的空刻度标签
Avoid empty tick labels in histogram (lattice)
我从 csv 文件中读取数据:
| proband | stimulus | group |
|---------|----------|-------|
| 0 | A | X |
| 0 | B | Y |
| 0 | C | Z |
| 1 | A | X |
| 1 | B | Y |
| 1 | C | N |
我正在读取 csv 文件并将每个刺激的直方图绘制为 pdf:
Data <- read.csv(file="./groups_data.csv", head=TRUE, sep=";")
library(lattice)
pdf("output/groups_single.pdf", width=8, height=4)
par(mar=c(1.5,0,1,2.5), xpd=TRUE)
bar_plot_single <- histogram(~ group | stimulus, data=Data, layout=c(1,1), xlab="Gruppe", ylab="Häufigkeit (%)", scales=list(x=list(rot=90)))
print(bar_plot_single)
dev.off()
当我使用格子为每个刺激绘制直方图时,我想避免空刻度标签(例如下图中的 N、Y、Z):
我认为它不适用于 lattice
的分面,但您可以这样手动循环:
library(lattice)
dat <- data.frame(proband = c(0, 0, 0, 1, 1, 1),
stimulus = c("A", "B", "C", "A", "B", "C"),
group = c("X", "Y", "Z", "X", "Y", "N"))
labels <- rbind("", levels(dat$group))
by(dat, dat$stimulus, function(x) {
histogram(~ group,
data = x,
layout = c(1,1),
xlab = "Gruppe",
ylab = "Häufigkeit (%)",
ylim = c(-10, 110),
scales = list(x=list(rot=90,
labels = labels[cbind(levels(x[, 3]) %in% x[, 3] + 1,
1:length(levels(x[, 3])))])),
drop.unused.levels = FALSE) })
为每个绘图指定 x 轴刻度标签。
保存返回的列表对象然后
do.call(gridExtra::grid.arrange, c(p, nrow = 1))
给出如下图:
然后到 pdf 也与您的问题相同:
pdf("groups_single.pdf", width=8, height=4)
par(mar=c(1.5,0,1,2.5), xpd=TRUE)
by(dat, dat$stimulus, function(x) {
histogram(~ group,
data = x,
layout = c(1,1),
xlab = "Gruppe",
ylab = "Häufigkeit (%)",
ylim = c(-10, 110),
scales = list(x=list(rot=90,
labels = labels[cbind(levels(x[, 3]) %in% x[, 3] + 1,
1:length(levels(x[, 3])))])),
drop.unused.levels = FALSE) })
dev.off()
我通过使用 for 循环设法得到了符合我需要的结果。
Data <- read.csv(file="./groups_data.csv", head=TRUE, sep=";")
stimuli <- factor(unique(Data$stimulus))
library(lattice)
pdf("output/groups_single.pdf", width=8, height=4)
par(mar=c(1.5,0,1,2.5), xpd=TRUE)
for ( i in stimuli ) {
data <- subset(Data, stimulus == i)
bar_plot_single <- histogram(~ group | stimulus,
data=data,
layout=c(1,1),
ylim=c(0,100),
xlab="Gruppe",
ylab="Häufigkeit (%)",
scales=list(x=list(rot=90)),
panel=function(...){
panel.abline(h=seq(0,150,20))
panel.abline(v=seq(0,150,1))
panel.histogram(...)
})
print(bar_plot_single)
}
dev.off()
我从 csv 文件中读取数据:
| proband | stimulus | group |
|---------|----------|-------|
| 0 | A | X |
| 0 | B | Y |
| 0 | C | Z |
| 1 | A | X |
| 1 | B | Y |
| 1 | C | N |
我正在读取 csv 文件并将每个刺激的直方图绘制为 pdf:
Data <- read.csv(file="./groups_data.csv", head=TRUE, sep=";")
library(lattice)
pdf("output/groups_single.pdf", width=8, height=4)
par(mar=c(1.5,0,1,2.5), xpd=TRUE)
bar_plot_single <- histogram(~ group | stimulus, data=Data, layout=c(1,1), xlab="Gruppe", ylab="Häufigkeit (%)", scales=list(x=list(rot=90)))
print(bar_plot_single)
dev.off()
当我使用格子为每个刺激绘制直方图时,我想避免空刻度标签(例如下图中的 N、Y、Z):
我认为它不适用于 lattice
的分面,但您可以这样手动循环:
library(lattice)
dat <- data.frame(proband = c(0, 0, 0, 1, 1, 1),
stimulus = c("A", "B", "C", "A", "B", "C"),
group = c("X", "Y", "Z", "X", "Y", "N"))
labels <- rbind("", levels(dat$group))
by(dat, dat$stimulus, function(x) {
histogram(~ group,
data = x,
layout = c(1,1),
xlab = "Gruppe",
ylab = "Häufigkeit (%)",
ylim = c(-10, 110),
scales = list(x=list(rot=90,
labels = labels[cbind(levels(x[, 3]) %in% x[, 3] + 1,
1:length(levels(x[, 3])))])),
drop.unused.levels = FALSE) })
为每个绘图指定 x 轴刻度标签。
保存返回的列表对象然后
do.call(gridExtra::grid.arrange, c(p, nrow = 1))
给出如下图:
然后到 pdf 也与您的问题相同:
pdf("groups_single.pdf", width=8, height=4)
par(mar=c(1.5,0,1,2.5), xpd=TRUE)
by(dat, dat$stimulus, function(x) {
histogram(~ group,
data = x,
layout = c(1,1),
xlab = "Gruppe",
ylab = "Häufigkeit (%)",
ylim = c(-10, 110),
scales = list(x=list(rot=90,
labels = labels[cbind(levels(x[, 3]) %in% x[, 3] + 1,
1:length(levels(x[, 3])))])),
drop.unused.levels = FALSE) })
dev.off()
我通过使用 for 循环设法得到了符合我需要的结果。
Data <- read.csv(file="./groups_data.csv", head=TRUE, sep=";")
stimuli <- factor(unique(Data$stimulus))
library(lattice)
pdf("output/groups_single.pdf", width=8, height=4)
par(mar=c(1.5,0,1,2.5), xpd=TRUE)
for ( i in stimuli ) {
data <- subset(Data, stimulus == i)
bar_plot_single <- histogram(~ group | stimulus,
data=data,
layout=c(1,1),
ylim=c(0,100),
xlab="Gruppe",
ylab="Häufigkeit (%)",
scales=list(x=list(rot=90)),
panel=function(...){
panel.abline(h=seq(0,150,20))
panel.abline(v=seq(0,150,1))
panel.histogram(...)
})
print(bar_plot_single)
}
dev.off()