Проблемы с маркировкой осей на боксплотах в R - PullRequest
0 голосов
/ 29 января 2020

Надеюсь, это быстрое решение. Я пытаюсь составить коробку с информацией о концентрациях питательных веществ в реках, используя код R, написанный человеком, ранее находившимся на моем месте (и я не настолько опытен с R, но мы используем его только для этого). Проблема заключается в том, что на оси выходного блочного графика есть несколько перекрывающихся текстов, некоторые из которых, кажется, происходят из другой части кода, которая, как я думал, не диктует метки осей. Оригинальный код показан ниже (рабочий каталог уже установлен и импортированные csv-файлы, и я знаю, что это работает), а получающийся в результате блокпост находится в 1 .

Редактировать: Код ниже

png(filename="./TP & TN Plotting/Plots/TN Concentration/Historical TN Concentrations Zoomed to Medians.png",
width=10,
    height=4,
    unit="in",
    res=600)
par(mar=c(5,5,3,1),
cex=.75)
tnhistconc<-(boxplot(Conc_ppb[Year!=2009 & Year !=2010]~Year[Year!=2009 & Year !=2010],
data=TNhist))
boxplot(Conc_ppb[Year!=2009 & Year !=2010]~Year[Year!=2009 & Year !=2010],
data=TNhist,
ylim=c(0,3000),
xaxt="n"),
at=c(1:3,5:8,10:(length(tnhistconc$n)+2)))
axis.break(axis=1,breakpos=c(4),style="slash")
axis.break(axis=1,breakpos=c(9),style="slash")
text(c(1:3,5:8,10:(length(tnhistconc$n)+2)),
-50,
paste("n=",
tnhistconc$n),
cex=0.8)
title(ylab="TN Concentration (ppb)",
xlab="Year")
title(main=paste("Historical (1998 - 2000), (2005 - 2008) + UMass (2012 - 
",max(TNhist$Year),") TN Concentration"))
dev.off()

Я сделал правку добавления, xlab = "", ylab = "" после xlab = "Year" в нижней части, так как это исправило эту проблему в других подобных разделах кода boxplot (за исключением того, что кажется, что я нужно было добавить его в другую часть этих разделов, см. 2 - также пробовал после xaxt = "n", как в 2 и получил тот же результат). Это устраняет проблему с перекрывающимся текстом, но метки осей по-прежнему не такие, какими я хочу их видеть («Год» и «Концентрация TN (ppb)), и это показано в 3 .

Итак, кто-нибудь потенциально знает простое исправление, которое могло бы избавиться от этих нежелательных меток и заменить их правильными? Я что-то упустил из-за основы c? Тот же самый оригинальный код, казалось, работал хорошо в прошлом Я делал это (для данных 2018 года), и электронные таблицы, из которых импортируются данные, одинаковы, одинаковые настройки и все. Большое спасибо заранее!

Редактировать: у меня есть образец набора данных, который является просто данные за последние 2 года. См. здесь: https://docs.google.com/spreadsheets/d/10oo9w-IzXkLWdY10A9gHYhDH67MeSibBpc2q67L6o88/edit?usp=sharing

Исходный код результата

Как этот код исправил другие подобные проблемы

Частично фиксированный результат на основе редактирования

1 Ответ

0 голосов
/ 29 января 2020

Я не знаю, является ли это опечаткой, но после xatx = "n" у вас есть лишние скобки. Может быть, вы можете попробовать что-то вроде этого:

png(filename="./TP & TN Plotting/Plots/TN Concentration/Historical TN Concentrations Zoomed to Medians.png",
    width=10, height=4, unit="in", res=600)
par(mar=c(5,5,3,1), cex=.75)
tnhistconc<-(boxplot(Conc_ppb[Year!=2009 & Year !=2010]~Year[Year!=2009 & Year !=2010], data=TNhist))
boxplot(Conc_ppb[Year!=2009 & Year !=2010]~Year[Year!=2009 & Year !=2010],
        data=TNhist,
        ylim=c(0,3000),
        xaxt="n", ylab = "", xlab = "",
at=c(1:3,5:8,10:(length(tnhistconc$n)+2)))
axis.break(axis=1,breakpos=c(4),style="slash")
axis.break(axis=1,breakpos=c(9),style="slash")
text(c(1:3,5:8,10:(length(tnhistconc$n)+2)),
     -50,
     paste("n=",
           tnhistconc$n),
     cex=0.8)
title(ylab="TN Concentration (ppb)",
      xlab="Year", 
      main=paste("Historical (1998 - 2000), (2005 - 2008) + UMass (2012 - 
",max(TNhist$Year),") TN Concentration"))
dev.off()

xatx удалит ось X (это будет контролировать axis.break. xlab и ylab удалит заголовок оси X и Y, и они будет установлен позже title.

Надеюсь, это будет работать

РЕДАКТИРОВАТЬ: Использование ggplot2

Ваш кадр данных на самом деле находится в более длинный формат, облегчающий подготовку к построению с использованием ggplot2 в несколько строк. Здесь ваш набор данных называется df:

library(ggplot2)
ggplot(df, aes(x = as.factor(Year), y = Conc_ppb))+
  geom_boxplot()+
  labs(x = "Year", y = "TN Concentration (ppb)",
       title = paste("Historical (1998 - 2000), (2005 - 2008) + UMass (2012 - 
",max(df$Year),") TN Concentration"))

enter image description here

...