簡體   English   中英

排序Y軸值ggplot

[英]Sorting Y Axis Values ggplot

我正在嘗試創建一個點圖,其中在我的Y軸上從AZ到底部列出了國家。 獎牌數將是四個地塊中每個地塊的X軸,金,銀,銅牌和總計地塊各一個。 當然,ggplot傾向於從ZA中繪制國家,盡管閱讀了所有有關該問題的信息,但我尚未解決該問題。 我非常感謝在編碼和理解方面的任何直接幫助。

mdat <- melt(raw, value.name = "Count", variable.name = "Place", id.var = "Country")
mdat[, "Place"] <- factor(mdat[, "Place"], levels=c("Gold", "Silver", "Bronze",          "Total"))
##I know my problem is likely on or around the above line  ##
plot1 <- ggplot(mdat, aes(x = Count, y = Country, colour = Place)) +
  geom_point() +
  facet_grid(.~Place) + theme_bw()+
  scale_colour_manual(values=c("#FFCC33", "#999999", "#CC6600", "#000000")) 
print(plot1)


Algeria     Gold    4
Argentina   Gold    5
Armenia     Gold    1
Algeria     Silver  2
Argentina   Silver  5
Armenia     Silver  2
Algeria     Bronze  4
Argentina   Bronze  2
Armenia     Bronze  0

在繪制之前,您必須對Country級別進行排序。 另外,您提供的數據沒有Total級別。 以下方法應會給您所需的結果:

讀取數據(包括Place變量的Total水平):

mdat <- read.table(text="Country    Place Count
Algeria     Gold    4
Argentina   Gold    5
Armenia     Gold    1
Algeria     Silver  2
Argentina   Silver  5
Armenia     Silver  2
Algeria     Bronze  4
Argentina   Bronze  2
Armenia     Bronze  0
Algeria     Total   10
Argentina   Total   12
Armenia     Total   3", header=TRUE)

排序Country變量的級別:

mdat$Country <- factor(mdat$Country,levels=sort(unique(mdat$Country),decreasing=TRUE))

按照正確的順序獲取Place變量:

levels(mdat$Place) <- c("Bronze"=3,"Gold"=1,"Silver"=2,"Total"=4)
mdat$Place <- as.numeric(mdat$Place)
mdat$Place <- as.factor(mdat$Place)
levels(mdat$Place) <- c("Gold","Silver","Bronze","Total")

創建圖:

ggplot(mdat, aes(x = Count, y = Country, colour = Place)) +
  geom_point(size=4) +
  facet_grid(.~Place) + theme_bw()+
  scale_colour_manual(values=c("#FFCC33","#999999","#CC6600","#000000"))

給出以下圖: 在此處輸入圖片說明


當您已經融化數據時,我懷疑raw數據幀中沒有Total變量。 您可以使用以下方法進行計算:

raw$Total <- rowSums(..specify the Gold, Silver & Bronze columns here..)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM