我有這樣的資料
df <-structure(list(team_3_F = c("team ", "team ", "site", "site",
"team ", "team ", "newyorkish", "newyorkish", "team ", "team ",
"newyorkish", "newyorkish", "browingal ", "browingal ", "site",
"site", "browingal ", "browingal ", "browingal ", "browingal ",
"team ", "team ", "team ", "team ", "team ", "team ", "team ",
"team ", "team ", "team ", "site", "site", "browingal ", "browingal ",
"browingal ", "browingal ", "browingal ", "browingal ", "browingal ",
"browingal ", "browingal ", "browingal ", "team ", "team ", "team ",
"team ", "newyorkish", "newyorkish", "browingal ", "browingal ",
"newyorkish", "newyorkish", "browingal ", "browingal ", "team ",
"team ", "browingal ", "browingal ", "team "), name = c("AAA_US",
"BBB_US", "AAA_US", "BBB_US", "AAA_US", "BBB_US", "AAA_US", "BBB_US",
"AAA_US", "BBB_US", "AAA_US", "BBB_US", "AAA_US", "BBB_US", "AAA_US",
"BBB_US", "AAA_US", "BBB_US", "AAA_US", "BBB_US", "AAA_US", "BBB_US",
"AAA_US", "BBB_US", "AAA_US", "BBB_US", "AAA_US", "BBB_US", "AAA_US",
"BBB_US", "AAA_US", "BBB_US", "AAA_US", "BBB_US", "AAA_US", "BBB_US",
"AAA_US", "BBB_US", "AAA_US", "BBB_US", "AAA_US", "BBB_US", "AAA_US",
"BBB_US", "AAA_US", "BBB_US", "AAA_US", "BBB_US", "AAA_US", "BBB_US",
"AAA_US", "BBB_US", "AAA_US", "BBB_US", "AAA_US", "BBB_US", "AAA_US",
"BBB_US", "AAA_US"), value = c(0L, 0L, 0L, 8L, 1L, 0L, 11L, 0L,
0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 45L,
0L, 0L, 0L, 18L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 2L, 0L, 3L,
0L, 2L, 0L, 2L, 1L, 0L, 4L, 0L, 88L, 0L, 0L, 1L, 5L, 0L, 0L,
0L, 0L, 0L, 0L, 1L, 19L)), row.names = c(NA, -59L), class = "data.frame")
我這樣繪制
ggplot(df, aes(x = team_3_F, y = name, fill = value))
geom_tile()
theme_classic(base_size = 12)
scale_fill_gradient2(low = "blue", high = "red",mid = "white",midpoint = 1)
我想知道是否有任何其他方法來繪制它,這樣我就不會錯過小值,因為我的資料中有很多零
例如,是否有可能繪制為點而不是顏色塊?例如在團隊中,因為這個類別存在 6 個值,所以給 6 分
如果我們看下面
在團隊類別中,AAA_US 有 6 個值,表示團隊類別中的 6 個點,BBB_US 有 0 個值,表示 0 個點
team AAA_US 0
team AAA_US 1
team AAA_US 0
team AAA_US 0
team AAA_US 45
team AAA_US 0
team AAA_US 18
team AAA_US 0
team AAA_US 1
team AAA_US 4
team AAA_US 0
team AAA_US 19
team BBB_US 0
team BBB_US 0
team BBB_US 0
team BBB_US 0
team BBB_US 0
team BBB_US 0
team BBB_US 0
team BBB_US 0
team BBB_US 0
team BBB_US 0
team BBB_US 0
uj5u.com熱心網友回復:
聽起來您想要在刻度的下部對顏色進行更細粒度的區分。您可以使用scale_fill_gradientn. 但是,請注意,您還存在一些問題,即某些圖塊具有相同的 x、y 坐標,因此被繪制在較早的圖塊上。我的猜測是你應該平均這些值以正確繪制它們。鑒于細粒度的圖例難以閱讀,我還建議您添加文本值來表示每個圖塊的值:
ggplot(df, aes(x = team_3_F, y = name))
stat_summary_2d(
aes(z = value, fill = after_stat(value)),
fun = mean,
geom = "tile"
)
theme_classic(base_size = 12)
scale_fill_gradientn(colours = viridis::plasma(length(unique(df$value))),
values = sort(unique(df$value))/max(df$value))
stat_summary_2d(
aes(z = value,
label = after_stat(scales::number(value, accuracy = 0.01))),
fun = mean, color = "white", size = 8,
geom = "text"
)
coord_equal()

編輯
如果您希望顏色反映非零計數的數量,并希望一些點代表非零計數而不是數字,您可以執行以下操作:
ggplot(df, aes(x = team_3_F, y = name))
stat_summary_2d(
aes(z = value, fill = after_stat(value)),
fun = function(x) sum(x != 0),
geom = "tile"
)
theme_classic(base_size = 12)
geom_point(data = df[df$value != 0,], color = "white", fill = "black",
shape = 21, size = 3,
position = position_dodge2(width = 1))
scale_fill_gradient2(low = "blue3", mid = "white", high = "red3",
midpoint = 3.5)
coord_equal()

如果你想要數字而不是點(因為它們看起來更好 IMO)
ggplot(df, aes(x = team_3_F, y = name))
stat_summary_2d(
aes(z = value, fill = after_stat(value)),
fun = function(x) sum(x != 0),
geom = "tile"
)
theme_classic(base_size = 12)
geom_label(data = df[df$value != 0,], color = "black", size = 8,
stat = StatBin2d, aes(label = ..count..),
fill = "white")
scale_fill_gradient2(low = "blue3", mid = "white", high = "red3",
midpoint = 3.5)
coord_equal()

轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/436088.html
