在ggplot2条形图中对国家/地区名称进行排序

时间:2015-08-22 20:49:59

标签: r ggplot2

我想绘制按字母顺序排序的国家/地区名称,其中阿根廷位于顶部。当我将arrange(Country)更改为arrange(desc(Country))时,数据框按降序排序,但ggplot也会相同。

# Turbines and manufacturers
library(XML)
library(dplyr)
library(ggplot2)

data_url <- "http://www.thewindpower.net/turbines_manufacturers_en.php"

doc <- htmlParse(data_url)

data <- readHTMLTable(doc,
                  colClasses = c("character","character","character"),
                  trim = TRUE,
                  which = 6
                  )

plot_data <- data %>%
    filter(Country != "") %>%
    group_by(Country) %>%
    summarise(Freq = n()) %>%
    arrange(Country)


# A bar graph
ggplot(plot_data, aes(Country , Freq,  fill=Country)) + 
    coord_flip() +
    geom_bar(stat="identity", width=.90) + 
    xlab("") + # Set axis labels
    ylab("") + 
    guides(fill=FALSE) +
    ggtitle("Number of Turbine Manufacturers by Country") + 
    theme_minimal()

Number of Turbine Manufacturers by Country

1 个答案:

答案 0 :(得分:4)

默认情况下,ggplot2按照编码顺序绘制因子。您的字母顺序编码(请参阅levels(plot_data$Country)),但coord_flip()会将其混乱。你可以使用scale_x_reverse(),但你有一个离散值,所以它不会工作。

你需要将因子Country重新定义为与目前相反的因素。

为此,请添加以下行:

plot_data$Country <- factor(plot_data$Country, levels = rev(levels(plot_data$Country)))

在您的情节数据之后,但在图表之前。

enter image description here