使用R中的ggplot定制热图外观

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用R中的ggplot定制热图外观相关的知识,希望对你有一定的参考价值。

我只是想开始说,我非常感谢大家在StackOverflow上的帮助!作为一个新的编码器,很多解决方案指南都容易使人困惑,这里的每个人都非常有帮助。

现在,我的最新问题是我在R中使用ggplot在下面构建此热图,但它看起来很忙(当所有数据都存在时,它是完整视图。)我希望可以:

A。使色标不影响按月总计进行的着色销售,而仅对行中的物料类型销售进行着色(基本上是物料在哪个月卖得好,什么时候没有卖)。

B。或采用图形方式使它看起来不那么忙碌,例如垂直线与水平线的颜色不同。

谢谢您的帮助!enter image description here

> dput(head(sales, 100))
structure(list(Region = c("Sub-Saharan Africa", "Europe", "Middle East and North Africa", 
"Sub-Saharan Africa", "Europe", "Sub-Saharan Africa", "Asia", 
"Asia", "Sub-Saharan Africa", "Central America and the Caribbean", 
"Sub-Saharan Africa", "Europe", "Europe", "Central America and the Caribbean", 
"Middle East and North Africa", "Australia and Oceania", "Central America and the Caribbean", 
"Europe", "Middle East and North Africa", "Europe", "Asia", "Europe", 
"Europe", "Asia", "Europe", "Europe", "Europe", "Europe", "Australia and Oceania", 
"Central America and the Caribbean", "Europe", "Europe", "Europe", 
"Europe", "Central America and the Caribbean", "Middle East and North Africa", 
"Middle East and North Africa", "Europe", "Sub-Saharan Africa", 
"Europe", "Europe", "Asia", "Middle East and North Africa", "Europe", 
"Middle East and North Africa", "Europe", "Europe", "Australia and Oceania", 
"Australia and Oceania", "Australia and Oceania", "Europe", "Australia and Oceania", 
"Sub-Saharan Africa", "Sub-Saharan Africa", "Asia", "Sub-Saharan Africa", 
"Europe", "Europe", "Central America and the Caribbean", "Europe", 
"Middle East and North Africa", "Central America and the Caribbean", 
"Europe", "Europe", "Europe", "Sub-Saharan Africa", "Sub-Saharan Africa", 
"Sub-Saharan Africa", "Europe", "Europe", "Europe", "Europe", 
"Sub-Saharan Africa", "Sub-Saharan Africa", "Europe", "Sub-Saharan Africa", 
"Sub-Saharan Africa", "Europe", "Asia", "Central America and the Caribbean", 
"Asia", "Middle East and North Africa", "North America", "Sub-Saharan Africa", 
"Sub-Saharan Africa", "Europe", "Europe", "Sub-Saharan Africa", 
"Europe", "Sub-Saharan Africa", "Central America and the Caribbean", 
"Sub-Saharan Africa", "Sub-Saharan Africa", "Australia and Oceania", 
"Middle East and North Africa", "Sub-Saharan Africa", "Sub-Saharan Africa", 
"Europe", "Sub-Saharan Africa", "Sub-Saharan Africa"), Country = c("Chad", 
"Latvia", "Pakistan", "Democratic Republic of the Congo", "Czech Republic", 
"South Africa", "Laos", "China", "Eritrea", "Haiti", "Cameroon", 
"Bosnia and Herzegovina", "Germany", "Barbados", "Algeria", "Palau", 
"Cuba", "Vatican City", "Lebanon", "Lithuania", "Myanmar", "Ukraine", 
"Russia", "Japan", "Russia", "Liechtenstein", "Slovakia", "Albania", 
"Federated States of Micronesia", "Dominica", "Andorra", "Switzerland", 
"Lithuania", "San Marino", "Nicaragua", "Azerbaijan", "Syria", 
"Serbia", "Mauritius", "Germany", "Italy", "Bhutan", "Turkey", 
"Bulgaria", "Pakistan", "Poland", "France", "Fiji", "Australia", 
"Nauru", "Slovenia", "Samoa", "South Africa", "Ghana", "Sri Lanka", 
"Guinea", "Spain", "Moldova", "Dominican Republic", "Luxembourg", 
"Kuwait", "Saint Lucia", "Georgia", "Bosnia and Herzegovina", 
"Iceland", "Mauritius", "Malawi", "Seychelles", "Montenegro", 
"Germany", "Estonia", "Serbia", "Madagascar", "Benin", "Hungary", 
"Djibouti", "Senegal", "Ireland", "Mongolia", "Antigua and Barbuda", 
"Cambodia", "Oman", "United States of America", "Mauritania", 
"Central African Republic", "Albania", "Switzerland", "Ghana", 
"Austria", "Democratic Republic of the Congo", "Dominican Republic", 
"Mauritius", "Cote d'Ivoire", "Samoa", "Kuwait", "Uganda", "Senegal", 
"Moldova", "Cote d'Ivoire", "Niger"), Item_Type = c("Office Supplies", 
"Beverages", "Vegetables", "Household", "Beverages", "Beverages", 
"Vegetables", "Baby Food", "Meat", "Office Supplies", "Cereal", 
"Baby Food", "Office Supplies", "Vegetables", "Clothes", "Snacks", 
"Beverages", "Beverages", "Personal Care", "Snacks", "Meat", 
"Office Supplies", "Snacks", "Cosmetics", "Meat", "Vegetables", 
"Cereal", "Baby Food", "Baby Food", "Beverages", "Office Supplies", 
"Personal Care", "Clothes", "Vegetables", "Fruits", "Cosmetics", 
"Baby Food", "Beverages", "Fruits", "Meat", "Cereal", "Clothes", 
"Clothes", "Cosmetics", "Household", "Cereal", "Baby Food", "Beverages", 
"Personal Care", "Office Supplies", "Cosmetics", "Clothes", "Cereal", 
"Vegetables", "Office Supplies", "Meat", "Fruits", "Personal Care", 
"Cereal", "Personal Care", "Office Supplies", "Fruits", "Vegetables", 
"Cosmetics", "Snacks", "Personal Care", "Office Supplies", "Meat", 
"Personal Care", "Household", "Meat", "Clothes", "Baby Food", 
"Beverages", "Clothes", "Snacks", "Fruits", "Household", "Meat", 
"Baby Food", "Personal Care", "Vegetables", "Baby Food", "Office Supplies", 
"Cosmetics", "Baby Food", "Vegetables", "Household", "Vegetables", 
"Household", "Clothes", "Baby Food", "Personal Care", "Office Supplies", 
"Personal Care", "Fruits", "Beverages", "Personal Care", "Household", 
"Personal Care"), Sales_Channel = c("Online", "Online", "Offline", 
"Online", "Online", "Offline", "Online", "Online", "Online", 
"Online", "Offline", "Offline", "Online", "Offline", "Offline", 
"Offline", "Online", "Online", "Offline", "Offline", "Online", 
"Online", "Offline", "Offline", "Offline", "Offline", "Offline", 
"Offline", "Online", "Offline", "Online", "Online", "Offline", 
"Online", "Online", "Online", "Online", "Online", "Offline", 
"Online", "Offline", "Offline", "Online", "Offline", "Offline", 
"Offline", "Offline", "Online", "Online", "Offline", "Online", 
"Offline", "Online", "Online", "Offline", "Online", "Offline", 
"Online", "Online", "Online", "Offline", "Online", "Offline", 
"Offline", "Online", "Online", "Online", "Online", "Online", 
"Online", "Offline", "Online", "Offline", "Offline", "Online", 
"Offline", "Offline", "Offline", "Online", "Online", "Online", 
"Online", "Offline", "Offline", "Offline", "Online", "Online", 
"Online", "Online", "Offline", "Online", "Offline", "Online", 
"Online", "Online", "Offline", "Offline", "Offline", "Online", 
"Online"), Order_Priority = c("L", "C", "C", "C", "C", "H", "L", 
"C", "L", "C", "M", "M", "C", "C", "C", "L", "H", "L", "H", "H", 
"C", "C", "L", "H", "L", "L", "H", "C", "M", "H", "M", "M", "M", 
"H", "L", "M", "L", "H", "H", "L", "H", "L", "L", "L", "M", "C", 
"M", "L", "H", "H", "M", "C", "M", "L", "M", "C", "L", "M", "L", 
"L", "L", "C", "H", "H", "H", "M", "C", "C", "L", "L", "H", "M", 
"C", "H", "M", "H", "H", "H", "L", "H", "H", "C", "L", "L", "H", 
"H", "M", "M", "H", "L", "L", "H", "H", "M", "H", "L", "C", "H", 
"H", "C"), Order_Date = c("1/27/2011", "12/28/2015", "1/13/2011", 
"9/11/2012", "10/27/2015", "7/10/2012", "2/20/2011", "4/10/2017", 
"11/21/2014", "7/4/2015", "1/1/2016", "10/20/2012", "2/22/2015", 
"1/1/2016", "6/21/2011", "9/19/2013", "11/15/2015", "4/6/2015", 
"4/12/2010", "9/26/2011", "1/2/2016", "8/14/2010", "4/13/2012", 
"9/19/2013", "12/2/2015", "2/26/2017", "1/2/2016", "5/20/2011", 
"10/24/2013", "6/14/2011", "6/20/2015", "8/5/2011", "1/2/2016", 
"7/5/2015", "3/25/2015", "8/22/2013", "1/3/2016", "6/23/2013", 
"5/8/2015", "1/3/2016", "3/10/2013", "3/18/2012", "2/11/2015", 
"10/30/2012", "7/6/2012", "1/4/2011", "10/25/2013", "1/3/2016", 
"3/16/2014", "1/3/2016", "9/30/2010", "11/5/2010", "7/21/2017", 
"7/10/2013", "10/6/2012", "6/4/2011", "4/12/2014", "10/26/2015", 
"8/4/2011", "2/24/2017", "3/30/2011", "5/2/2015", "2/1/2014", 
"3/3/2012", "4/22/2015", "5/12/2011", "12/21/2011", "12/2/2010", 
"8/14/2010", "10/5/2010", "2/8/2012", "9/8/2012", "8/11/2011", 
"10/28/2012", "10/11/2013", "1/3/2016", "7/28/2017", "1/5/2016", 
"1/5/2016", "11/13/2014", "8/26/2012", "7/15/2014", "5/2/2011", 
"11/11/2013", "4/14/2011", "10/4/2012", "5/14/2013", "1/12/2013", 
"10/3/2012", "10/23/2010", "2/6/2014", "9/4/2011", "1/5/2016", 
"7/19/2015", "10/28/2012", "1/5/2016", "10/25/2013", "2/11/2011", 
"1/5/2016", "2/6/2012"), Order_ID = c(292494523, 361825549, 141515767, 
500364005, 127481591, 482292354, 844532620, 564251220, 411809480, 
327881228, 743598735, 479823005, 498603188, 953377091, 181401288, 
500204360, 640987718, 206925189, 221503102, 878520286, 319358670, 
746630275, 246883237, 967895781, 305029237, 223957431, 485685670, 
121455848, 332936227, 692031657, 365978467, 392325484, 917994248, 
603977954, 965943562, 233629691, 664174449, 212921321, 763686978, 
520714461, 637702119, 671986758, 912333714, 540041816, 156722390, 
434299266, 765008771, 593408763, 856333482, 682830178, 574837148, 
365692222, 289660394, 681165492, 594943845, 956044280, 509828126, 
771969211, 178453862, 835580909, 869961678, 278519999, 478492200, 
257427108, 723186051, 353942859, 848183858, 374707877, 322626245, 
351362788, 640653836, 540548217, 821407258, 523904788, 109027135, 
113437545, 672654092, 701131856, 148230302, 230407607, 129491746, 
606854999, 885983693, 260676658, 345045220, 123513209, 900816953, 
452005279, 672439515, 827793490, 704053533, 157518470, 117058742, 
272820842, 548818433, 198175609, 875250566, 511720263, 929683959, 
923598563), Ship_Date = c("2/12/2011", "1/23/2016", "2/1/2011", 
"10/6/2012", "12/5/2015", "8/21/2012", "3/20/2011", "5/12/2017", 
"1/10/2015", "7/20/2015", "2/18/2016", "11/15/2012", "2/27/2015", 
"1/3/2016", "7/21/2011", "10/4/2013", "11/30/2015", "4/27/2015", 
"5/19/2010", "10/2/2011", "1/16/2016", "8/31/2010", "4/22/2012", 
"9/28/2013", "12/26/2015", "2/28/2017", "1/10/2016", "6/19/2011", 
"12/3/2013", "7/20/2011", "7/21/2015", "9/1/2011", "1/16/2016", 
"7/29/2015", "5/9/2015", "8/30/2013", "1/27/2016", "7/18/2013", 
"5/13/2015", "1/25/2016", "4/4/2013", "5/4/2012", "3/2/2015", 
"11/3/2012", "8/1/2012", "2/21/2011", "12/10/2013", "2/20/2016", 
"4/27/2014", "2/15/2016", "11/11/2010", "12/5/2010", "8/22/2017", 
"7/26/2013", "10/21/2012", "7/24/2011", "4/15/2014", "12/15/2015", 
"8/27/2011", "4/14/2017", "4/12/2011", "6/14/2015", "2/26/2014", 
"4/10/2012", "5/13/2015", "5/15/2011", "1/18/2012", "12/25/2010", 
"9/16/2010", "11/14/2010", "3/18/2012", "9/20/2012", "8/19/2011", 
"11/7/2012", "10/27/2013", "1/10/2016", "7/31/2017", "2/11/2016", 
"1/26/2016", "12/20/2014", "9/22/2012", "8/15/2014", "5/4/2011", 
"12/17/2013", "5/20/2011", "11/21/2012", "6/10/2013", "2/2/2013", 
"11/12/2012", "11/20/2010", "3/28/2014", "9/4/2011", "1/11/2016", 
"8/20/2015", "11/24/2012", "2/3/2016", "11/3/2013", "2/26/2011", 
"2/9/2016", "2/26/2012"), Units_Sold = c(4484, 1075, 6515, 7683, 
3491, 9880, 4825, 3330, 2431, 6197, 6245, 9145, 6618, 4322, 9527, 
441, 1365, 2617, 6545, 2530, 4182, 3345, 7091, 725, 3784, 2835, 
4038, 339, 2083, 6401, 16, 6684, 3753, 9353, 3020, 5072, 2834, 
7005, 803, 9835, 9083, 4670, 8675, 9229, 6493, 7659, 1950, 1695, 
6962, 3479, 5941, 5310, 5802, 861, 5959, 3603, 8327, 1699, 7318, 
5814, 9848, 9112, 5330, 7257, 5678, 8412, 5307, 3243, 1130, 4912, 
2562, 9084, 1516, 3924, 2407, 7545, 2148, 9352, 3495, 1586, 8340, 
735, 1118, 8871, 5403, 9158, 609, 7261, 8650, 1344, 3941, 2070, 
9138, 2605, 6425, 3421, 4947, 8252, 2998, 2194), Unit_Price = c(651.21, 
47.45, 154.06, 668.27, 47.45, 47.45, 154.06, 255.28, 421.89, 
651.21, 205.7, 255.28, 651.21, 154.06, 109.28, 152.58, 47.45, 
47.45, 81.73, 152.58, 421.89, 651.21, 152.58, 437.2, 421.89, 
154.06, 205.7, 255.28, 255.28, 47.45, 651.21, 81.73, 109.28, 
154.06, 9.33, 437.2, 255.28, 47.45, 9.33, 421.89, 205.7, 109.28, 
109.28, 437.2, 668.27, 205.7, 255.28, 47.45, 81.73, 651.21, 437.2, 
109.28, 205.7, 154.06, 651.21, 421.89, 9.33, 81.73, 205.7, 81.73, 
651.21, 9.33, 154.06, 437.2, 152.58, 81.73, 651.21, 421.89, 81.73, 
668.27, 421.89, 109.28, 255.28, 47.45, 109.28, 152.58, 9.33, 
668.27, 421.89, 255.28, 81.73, 154.06, 255.28, 651.21, 437.2, 
255.28, 154.06, 668.27, 154.06, 668.27, 109.28, 255.28, 81.73, 
651.21, 81.73, 9.33, 47.45, 81.73, 668.27, 81.73), Total_Profit = c(566105, 
16834.5, 411291.95, 1273303.59, 54669.06, 154720.8, 304602.25, 
319213.8, 139053.2, 782371.25, 553244.55, 876639.7, 835522.5, 
272847.86, 699662.88, 24316.74, 21375.9, 40982.22, 164017.7, 
139504.2, 239210.4, 422306.25, 390997.74, 126055.75, 216444.8, 
178973.55, 357726.42, 32496.54, 199676.38, 100239.66, 2020, 167501.04, 
275620.32, 590454.89, 7278.2, 881868.64, 271667.24, 109698.3, 
1935.23, 562562, 804662.97, 342964.8, 637092, 1604646.23, 1076084.89, 
678510.81, 186927, 26543.7, 174467.72, 439223.75, 1032961.67, 
389966.4, 513999.18, 54354.93, 752323.75, 206091.6, 20068.07, 
42576.94, 648301.62, 145698.84, 1243310, 21959.92, 336482.9, 
1261774.59, 313084.92, 210804.72, 670008.75, 185499.6, 28317.8, 
814065.76, 146546.4, 667128.96, 145323.76, 61449.84, 176770.08, 
416031.3, 5176.68, 1549906.96, 199914, 152033.96, 209000.4, 46400.55, 
107171.48, 1119963.75, 939419.61, 877885.88, 38446.17, 1203365.53, 
546074.5, 222741.12, 289427.04, 198430.2, 228998.28, 328881.25, 
161010.5, 8244.61, 77470.02, 206795.12, 496858.54, 54981.64), 
    Month_RecentYear = c(NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, "January", NA, NA, "January", NA, NA, NA, NA, NA, NA, 
    "January", NA, NA, NA, NA, NA, "January", NA, NA, NA, NA, 
    NA, "January", NA, NA, NA, "January", NA, NA, "January", 
    NA, NA, NA, NA, NA, NA, NA, "January", NA, "January", NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, "January", NA, "January", 
    "January", NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, "January", NA, NA, "January", NA, NA, "January", NA), 
    Year = c(2011, 2015, 2011, 2012, 2015, 2012, 2011, 2017, 
    2014, 2015, 2016, 2012, 2015, 2016, 2011, 2013, 2015, 2015, 
    2010, 2011, 2016, 2010, 2012, 2013, 2015, 2017, 2016, 2011, 
    2013, 2011, 2015, 2011, 2016, 2015, 2015, 2013, 2016, 2013, 
    2015, 2016, 2013, 2012, 2015, 2012, 2012, 2011, 2013, 2016, 
    2014, 2016, 2010, 2010, 2017, 2013, 2012, 2011, 2014, 2015, 
    2011, 2017, 2011, 2015, 2014, 2012, 2015, 2011, 2011, 2010, 
    2010, 2010, 2012, 2012, 2011, 2012, 2013, 2016, 2017, 2016, 
    2016, 2014, 2012, 2014, 2011, 2013, 2011, 2012, 2013, 2013, 
    2012, 2010, 2014, 2011, 2016, 2015, 2012, 2016, 2013, 2011, 
    2016, 2012), Month = c("January", "December", "January", 
    "September", "October", "July", "February", "April", "November", 
    "July", "January", "October", "February", "January", "June", 
    "September", "November", "April", "April", "September", "January", 
    "August", "April", "September", "December", "February", "January", 
    "May", "October", "June", "June", "August", "January", "July", 
    "March", "August", "January", "June", "May", "January", "March", 
    "March", "February", "October", "July", "January", "October", 
    "January", "March", "January", "September", "November", "July", 
    "July", "October", "June", "April", "October", "August", 
    "February", "March", "May", "February", "March", "April", 
    "May", "December", "December", "August", "October", "February", 
    "September", "August", "October", "October", "January", "July", 
    "January", "January", "November", "August", "July", "May", 
    "November", "April", "October", "May", "January", "October", 
    "October", "February", "September", "January", "July", "October", 
    "January", "October", "February", "January", "February")), class = c("spec_tbl_df", 
"tbl_df", "tbl", "data.frame"), row.names = c(NA, -100L), spec = structure(list(
    cols = list(Region = structure(list(), class = c("collector_character", 
    "collector")), Country = structure(list(), class = c("collector_character", 
    "collector")), Item_Type = structure(list(), class = c("collector_character", 
    "collector")), Sales_Channel = structure(list(), class = c("collector_character", 
    "collector")), Order_Priority = structure(list(), class = c("collector_character", 
    "collector")), Order_Date = structure(list(), class = c("collector_character", 
    "collector")), Order_ID = structure(list(), class = c("collector_double", 
    "collector")), Ship_Date = structure(list(), class = c("collector_character", 
    "collector")), Units_Sold = structure(list(), class = c("collector_double", 
    "collector")), Unit_Price = structure(list(), class = c("collector_double", 
    "collector")), Total_Profit = structure(list(), class = c("collector_double", 
    "collector")), Month_RecentYear = structure(list(), class = c("collector_character", 
    "collector")), Year = structure(list(), class = c("collector_double", 
    "collector")), Month = structure(list(), class = c("collector_character", 
    "collector"))), default = structure(list(), class = c("collector_guess", 
    "collector")), skip = 1), class = "col_spec"))

THISYEAR <- filter(sales, sales$Month_RecentYear != "NA")

df <- data.frame(
ItemType = c(THISYEAR$Item_Type),
UnitsSold = c(THISYEAR$Units_Sold),
TotalProfit = c(THISYEAR$Total_Profit),
MonthRecentYear = c(THISYEAR$Month_RecentYear))

df2 <- df %>%
group_by(MonthRecentYear, ItemType) %>%
summarise(TotalUnitsSold = sum(UnitsSold))

median(df2$TotalUnitsSold)

HEAT <- ggplot(data = df2, mapping = aes(x = factor(df2$MonthRecentYear, levels = c(month.name)), df2$ItemType)) + geom_tile(aes(fill = df2$TotalUnitsSold), color = "grey", size = 1) + geom_text(aes(label = df2$TotalUnitsSold)) + scale_fill_gradient2(low = ("red"), mid = ("yellow"), high = ("green"), midpoint = 45000)

 HEAT + labs(title = "Total Item Sales per Month in 2016", fill = "Units Sold", x = "Month", y = "Item Type")

我只是想开始说,我非常感谢大家在StackOverflow上的帮助!作为一种新的编码器,许多解决方案指南都容易造成混淆,这里的每个人都非常有帮助。现在我的...

答案

[我认为,您的问题B.有点过分回避(或者我听不懂)。你能澄清一下吗?

以上是关于使用R中的ggplot定制热图外观的主要内容,如果未能解决你的问题,请参考以下文章

R语言ggplot2绘图单元格为方块的热图简单小例子

R:如何使用 ggplot2 创建一个半色半数的热图?

R:使用 ggplot2 的离散热图

使用 ggplot2 在 r 中为热图准备数据框

R 数据可视化 —— 聚类热图 pheatmap

R中的动画热图