如何防止 x 标签与条形图中的条重叠?

How do I prevent x labels from overlapping my bars in a barplot?

代码如下:

barplot(colMeans(sample_data, na.rm = TRUE),
    las = 1,
    main = "Main Title",
    xlab = "Variable",
    ylab = "How Characteristic",
    col = rainbow(20),
    cex.names = 0.9,
    horiz = FALSE)

此处提供了示例数据集:

https://github.com/akaEmma/public_data/blob/master/sample_data.csv 或者你可以自己输入一些。这些是变量名称:

Love of Chocolate,Asian Knowledge,Stable Cleanliness,Love of People,Attention,Ethics,Aggression,Swimming,Style Points,Felinity

下面是一些与名字相关的数据:

8.67    9   6.25    7.33    6.33    5       6.67    5   5.25
8       3   6       6.67    8       7       7.67    4.5 5.25
7.33    7.5 5.75    8.67    8.67    8       5.33    2.5 3
8       6.5 6       6.33    8.33    5.33    5.67    6   6.5
6       5.5 5.25    5.33    5       4.67    4       4   3.5
7.67    7   6       4.67    7.33    5.67    7.67    5   3.75
8.67    8   7.5     5.67    7.33    5       8.33    7   7.75

如果我使用上面的代码,我会得到以下结果(忽略句点;它们并不重要):

如果我创建一个更大的图(比如用它填满我的屏幕),我会得到这个:

(忽略丢失的标签;我不小心遗漏了它,它应该是 "Felinity," 不管它是什么)

这种条形图适用于大屏幕上的 PowerPoint,因此我可以使用非常小的标签。

这就是我想要的:我想要干净漂亮的标签,每栏一个,由于这是一个愿望清单,我希望标签能够调整自己的大小,以便它们足够小以适合每栏一个,我希望它们位于正确的垂直点,这样它们就不会与条重叠。有任何想法吗?

发疯。我想要漂亮的条形图,我必须制作很多,所以对每一个都摆弄根本不是一种选择。无论变量名称的长度如何,每次都必须使用这种类型的数据文件。

谢谢!

请注意 theme_settheme_tufteggplot2 特定的函数。

使用ggplot2你可以做这样的事情

df <- read.csv("https://raw.githubusercontent.com/akaEmma/public_data/master/sample_data.csv")

library(tidyverse)
library(ggthemes)
df %>%
    gather(key, value) %>%
    group_by(key) %>%
    summarise(mean.value = mean(value, na.rm = T)) %>%
    mutate(key = factor(key, levels = key[rev(order(mean.value))])) %>%
    ggplot(aes(key, mean.value, fill = as.numeric(key))) +
    geom_col() +
    theme_tufte() +
    scale_fill_gradientn(colours = rainbow(5), guide = F) +
    theme(axis.text.x = element_text(size = 6)) + 
    labs(x = "", y = "How characteristic")