2017-01-23 55 views
0

我的問題是,我想做一個散點圖並將圓圈大小設置爲數據中的變量。雖然我可以做到這一點(因爲某些原因,變量需要重新調整比例),但這些圓圈的圖像看起來很奇怪(就像發生了一些像素化現象),圖例中的點的大小也會變形。r:ggplot2 scatterplot大小的圓圈和圖例問題

任何想法是什麼給?數據和代碼如下。

df_t<-structure(
    list(
    x = c(
     0.271802325581395, 
     0.28416149068323, 
     0.300177619893428, 
     0.273542600896861, 
     0.277777777777778, 
     0.295302013422819 
    ), 
    y = c(
     0.783430232558139, 
     0.708074534161491, 
     0.810834813499112, 
     0.689088191330344, 
     0.766937669376694, 
     0.651006711409396 
    ), 
    comp = 1:6, 
    mkt_share = c(
     0.259953161592506, 
     0.241921204072598, 
     0.404237288135593, 
     0.276032315978456, 
     0.283212302434857, 
     0.125510940129839 
    ) 
), 
    .Names = c("x", "y", "comp", "mkt_share"), 
    row.names = c("p2", "p3", "p4", "p5", "p6", "p7"), 
    class = "data.frame" 
) 

ggplot(data=df_t, aes(x=x, y=y, label=round(y,2), color = as.factor(comp)))+ 
    geom_point(size = df_t$mkt_share*50)+ 
    geom_text(size=4, color="white")+ 
    coord_cartesian(xlim = c(0, .4), ylim=c(.6,.9)) 
+1

變化'geom_point'到'geom_point(AES(大小= mkt_share))+'。在您的原始代碼中,您將調用的大小設置爲'aes'的外部,並且還在ggplot環境外部達到原始數據框(通過使用'df_t $ mkt_share'而不是'mkt_share')。 ggplot從字面上理解了這一點,所以尺寸值非常小,因爲市場份額很小,因此需要縮放係數爲50.另一方面,在調用'aes'內部將'mkt_share'映射爲尺寸一個忠實的尺寸美學映射。 – eipi10

+0

我試着做你的建議,但這似乎不起作用 - 而是它創造了第二個名爲'mkt_share'的傳說 – vashts85

+1

是的,沒錯。 'comp'映射到顏色。它是一個具有6種不同顏色和標籤1到6的離散變量。「mkt_share」是映射到大小的連續變量。你會得到每個不同的傳說。你的原始代碼(在我的系統中產生的圖很好)「硬編碼」圓的大小,給你一個「comp」的圖例,但是圓大小等於'mtk_share' * 50。一個單獨的圖例,但沒有一個比例尺告訴你什麼尺寸的圓被映射到一個給定的'mkt_share'值。 – eipi10

回答