首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >树状图ggplot2 R上具有梯度的不同颜色

树状图ggplot2 R上具有梯度的不同颜色
EN

Stack Overflow用户
提问于 2018-05-03 12:06:08
回答 2查看 6.5K关注 0票数 8

我有一个树状图(如下所示)。我唯一想做的改变是将子组(图中的年份)的颜色更改为不同的颜色,而不是所有的蓝色。这有可能吗?

样本数据帧

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
PL <- c(rep("PL1", 4), repl("PL2", 4), rep("PL3", 4), rep("PL4", 4))
CNT <- sample(seq(1:50), 16)
YEAR <- rep(c("2015", "2016", "2017", "2018"), 4)

df <- data.frame(PL, YEAR, CNT)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
PL <- c(rep("PL1", 4), repl("PL2", 4), rep("PL3", 4), rep("PL4", 4))
    CNT <- sample(seq(1:50), 16)
    YEAR <- rep(c("2015", "2016", "2017", "2018"), 4)

    df <- data.frame(PL, YEAR, CNT)

    # plot
library(ggplot2)
library(treemapify)
treeMapPlot <- ggplot(df, aes(area = CNT,
                              fill = CNT,
                              label=PL, 
                              subgroup=YEAR)) +
      geom_treemap() +
      geom_treemap_subgroup_border(colour = "white") +
      geom_treemap_text(fontface = "italic",
                        colour = "white",
                        place = "centre",
                        grow = F,
                        reflow = T) +
      geom_treemap_subgroup_text(place = "centre",
                                 grow = T,
                                 alpha = 0.5,
                                 colour = "#FAFAFA",
                                 min.size = 0)

treeMapPlot

如果我改变了fillaes,我可以得到这个,但我失去了梯度。我需要保留这些颜色,但是显示渐变颜色,意味着小的CNT更轻,更大的CNT更深。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
treeMapPlot <- ggplot(df, aes(area = CNT,
                              fill = YEAR,
                              label = PL, 
                              subgroup = YEAR))

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-05-03 12:34:17

这不是最美丽的解决方案,但映射计数到阿尔法模拟的每种颜色的光到暗的梯度。在aes(alpha = CNT)中添加geom_treemap,并根据需要缩放alpha。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
library(ggplot2)
library(treemapify)

PL <- c(rep("PL1",4),rep("PL2",4),rep("PL3",4),rep("PL4",4))
CNT <- sample(seq(1:50),16)
YEAR <- rep(c("2015","2016","2017","2018"),4)

df <- data.frame(PL,YEAR,CNT)

ggplot(df, aes(area = CNT, fill = YEAR, label=PL, subgroup=YEAR)) +

# change this line
    geom_treemap(aes(alpha = CNT)) +
    geom_treemap_subgroup_border(colour="white") +
    geom_treemap_text(fontface = "italic",
                                        colour = "white",
                                        place = "centre",
                                        grow = F,
                                        reflow=T) +
    geom_treemap_subgroup_text(place = "centre",
                                                         grow = T,
                                                         alpha = 0.5,
                                                         colour = "#FAFAFA",
                                                         min.size = 0) +
    scale_alpha_continuous(range = c(0.2, 1))

reprex封装创建于2018-05-03 (v0.2.0)。

编辑添加:基于这个职位通过在一个更深的填充层的顶部放置一个α缩放层来入侵假梯度。这里我使用了两个geom_treemap,一个带有fill = "black",另一个带有alpha缩放。仍有一些有待改进的地方。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ggplot(df, aes(area = CNT, fill = YEAR, label=PL, subgroup=YEAR)) +
    geom_treemap(fill = "black") +
    geom_treemap(aes(alpha = CNT)) +
    geom_treemap_subgroup_border(colour="white") +
    geom_treemap_text(fontface = "italic",
                                        colour = "white",
                                        place = "centre",
                                        grow = F,
                                        reflow=T) +
    geom_treemap_subgroup_text(place = "centre",
                                                         grow = T,
                                                         alpha = 0.5,
                                                         colour = "#FAFAFA",
                                                         min.size = 0) +
    scale_alpha_continuous(range = c(0.4, 1))

reprex封装创建于2018-05-03 (v0.2.0)。

票数 6
EN

Stack Overflow用户

发布于 2018-05-03 15:00:56

一种选择是分别计算每个单元格的颜色,然后直接绘制它们。这不能给你一个传奇,但可以说,一个传奇并不是那么有用。(你需要4个不同的传说,如果需要的话,可以将它们添加到情节中。)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
library(ggplot2)
library(treemapify)

set.seed(342)
PL <- c(rep("PL1", 4), rep("PL2", 4), rep("PL3", 4), rep("PL4", 4))
CNT <- sample(seq(1:50), 16)
YEAR <- rep(c("2015", "2016", "2017", "2018"), 4)

df <- data.frame(PL, YEAR, CNT)

# code to add colors to data frame follows
# first the additional packages needed
library(dplyr)
library(colorspace)  # install via: install.packages("colorspace", repos = "http://R-Forge.R-project.org")
library(scales)

# I'll use 4 palettes from the colorspace package, one for each year
palette <- rep(c("Teal", "Red-Yellow", "Greens", "Purples"), 4)

# We add the palette names and then calculate the colors for each
# data point. Two notes:
#  - we scale the colors to the maximum CNT in each year
#  - we're calculating 6 colors but use only 5 to make the gradient;
#    this removes the lightest color
df2 <- mutate(df,
              palette = palette) %>%
  group_by(palette) %>%
  mutate(
    max_CNT = max(CNT),
    color = gradient_n_pal(sequential_hcl(6, palette = palette)[1:5])(CNT/max_CNT))


ggplot(df2, aes(area = CNT, fill = color, label=PL, subgroup=YEAR)) +
  geom_treemap() +
  geom_treemap_subgroup_border(colour="white") +
  geom_treemap_text(fontface = "italic",
                    colour = "white",
                    place = "centre",
                    grow = F,
                    reflow=T) +
  geom_treemap_subgroup_text(place = "centre",
                             grow = T,
                             alpha = 0.5,
                             colour = "#FAFAFA",
                             min.size = 0) +
  scale_fill_identity()

如果不提前知道会出现多少种情况,也可以动态生成色标:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
library(ggplot2)
library(treemapify)

set.seed(341)
PL <- c(rep("PL1", 6), rep("PL2", 6), rep("PL3", 6), rep("PL4", 6))
CNT <- sample(seq(1:50), 24)
YEAR <- rep(c("2013", "2014", "2015", "2016", "2017", "2018"), 4)

df <- data.frame(PL, YEAR, CNT)

# code to add colors to data frame follows
# first the additional packages needed
library(dplyr)
library(colorspace)  # install via: install.packages("colorspace", repos = "http://R-Forge.R-project.org")
library(scales)

# number of palettes needed
n <- length(unique(YEAR))

# now calculate the colors for each data point
df2 <- df %>%
  mutate(index = as.numeric(factor(YEAR))- 1) %>%
  group_by(index) %>%
  mutate(
    max_CNT = max(CNT),
    color = gradient_n_pal(
      sequential_hcl(
        6,
        h = 360 * index[1]/n,
        c = c(45, 20),
        l = c(30, 80),
        power = .5)
      )(CNT/max_CNT)
    )

ggplot(df2, aes(area = CNT, fill = color, label=PL, subgroup=YEAR)) +
  geom_treemap() +
  geom_treemap_subgroup_border(colour="white") +
  geom_treemap_text(fontface = "italic",
                    colour = "white",
                    place = "centre",
                    grow = F,
                    reflow=T) +
  geom_treemap_subgroup_text(place = "centre",
                             grow = T,
                             alpha = 0.5,
                             colour = "#FAFAFA",
                             min.size = 0) +
  scale_fill_identity()

最后,您可以手动定义色标的颜色:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
library(ggplot2)
library(treemapify)

set.seed(341)
PL <- c(rep("PL1", 6), rep("PL2", 6), rep("PL3", 6), rep("PL4", 6))
CNT <- sample(seq(1:50), 24)
YEAR <- rep(c("2013", "2014", "2015", "2016", "2017", "2018"), 4)

df <- data.frame(PL, YEAR, CNT)

# code to add colors to data frame follows
# first the additional packages needed
library(dplyr)
library(colorspace)  # install via: install.packages("colorspace", repos = "http://R-Forge.R-project.org")
library(scales)

# each color scale is defined by a hue, a number between 0 and 360
hues <- c(300, 50, 250, 100, 200, 150)

# now calculate the colors for each data point
df2 <- df %>%
  mutate(index = as.numeric(factor(YEAR))) %>%
  group_by(index) %>%
  mutate(
    max_CNT = max(CNT),
    color = gradient_n_pal(
      sequential_hcl(
        6,
        h = hues[index[1]],
        c = c(45, 20),
        l = c(30, 80),
        power = .5)
    )(CNT/max_CNT)
  )

ggplot(df2, aes(area = CNT, fill = color, label=PL, subgroup=YEAR)) +
  geom_treemap() +
  geom_treemap_subgroup_border(colour="white") +
  geom_treemap_text(fontface = "italic",
                    colour = "white",
                    place = "centre",
                    grow = F,
                    reflow=T) +
  geom_treemap_subgroup_text(place = "centre",
                             grow = T,
                             alpha = 0.5,
                             colour = "#FAFAFA",
                             min.size = 0) +
  scale_fill_identity()

票数 16
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50163072

复制
相关文章
R中极树状图实现
极树状图类似于系统发育图或者环形的聚类图,其效果如下图所示: 查了一下相关资料,可以通过以下两种方法实现。以下用mtcars数据为例。 1. ape包 library(ape) data('mtcar
生信编程日常
2020/06/28
1.4K0
终于等到你——ggplot2树状图
2017年8月份的R语言更新包中,默默地加入了支持ggplot2树状图的新几何对象,从此在R语言中制作树状图,不用再求助于第三方包的辅助了。 该包既有Cran上的正式发行版,也有托管在GitHub上的开发版,安装方式如下: CRAN: install.package("treemapify") Github: devtools::install_github("wilkox/treemapify") GitHub主页: https://github.com/wilkox/treemapify 载入本文章所
数据小磨坊
2018/04/11
2.3K0
终于等到你——ggplot2树状图
ggplot2画密度分布图按取值范围填充不同的颜色
参考链接是 ggplot2 area plot : Quick start guide - R software and data visualization - Easy Guides - Wiki - STHDA
用户7010445
2020/12/08
2.7K0
ggplot2画密度分布图按取值范围填充不同的颜色
R语言ggplot2画热图添加分组信息的颜色条
之前有人在公众号留言问文章开头这幅图如何实现,下面的B图是折线图加柱形图,相对比较容易实现,上面的A图稍微有点复杂,我想到的办法是拼图,图A可以看成三个热图,然后加一个堆积柱形图,最后将四个图组合到一起。那就按照这个思路试一下看能不能实现。 最初的想法是左侧的颜色条用堆积柱形图来实现,又看了一遍Y叔公众号关于aplot这个包的推文,发现他是用geom_tile()函数实现的,仔细想想还是geom_tile()函数实现起来比较方便。 首先解决昨天的遗留问题:ggplot2画图添加文字内容的时候如何添加下划线
用户7010445
2021/01/06
5.2K0
「R」ggplot2 图区域放大
这个功能今天工作的时候需要,就搜了一下,有个 ggforce 包可以做这个事情(之前还 mark 过,哈哈)。
王诗翔呀
2020/07/02
2.2K0
【R】蜜蜂图beeswarm-颜色
今天我们来看看beeswarm的具体细节,以及怎么设置颜色。我们用beeswarm自带的乳腺癌数据为例。数据的具体格式如下
生信交流平台
2022/09/21
3470
【R】蜜蜂图beeswarm-颜色
R中轻松绘制树状热图的若干方法
R语言数据分析指南
2023/08/18
5090
R中轻松绘制树状热图的若干方法
matlab 柱状图不同颜色(取巧哈)[通俗易懂]
以前写过一个颜色索引的柱状图,但是年代久远想不起来了。 今天需要出一个不同颜色的柱状图,看了一下博客,首先使用了matlab中的children,但是发现颜色没有变化。
全栈程序员站长
2022/11/07
2K0
matlab 柱状图不同颜色(取巧哈)[通俗易懂]
R语言ggplot2画热图的时候在色块上添加文本
今天的推文没有详细介绍代码,代码的介绍会以视频形式放到B站,欢迎大家关注我的B站 小明的数据分析笔记本 https://space.bilibili.com/355787260 image.png 首先是示例数据的格式 画热图的数据 image.png 用来添加文本的数据 image.png 如果还有其他文本需要添加,可以再准备一份数据 image.png 加载需要用到的R包 library(ggplot2) library(tidyverse) #install.packages("s
用户7010445
2021/10/13
1.9K0
R-ggTimeSeries | ggplot2: 热力日历图
我们平常的日历也可以当作可视化工具,适用于显示不同时间段,以及活动事件的组织情况。时间段通常以不同单位显示,例如日、周、月和年。今天我们最常用的日历形式是公历,每个月份的月历由7个垂直列组成(代表每周7天),如图所示。
数据小磨坊
2020/09/10
2.4K0
R-ggTimeSeries | ggplot2: 热力日历图
医学统计与R语言:圆形树状图(circular dendrogram)
输入1: install.packages("ggraph") library(ggraph) install.packages("igraph") library(igraph) myedges <- import("edges.xlsx");myedges myedges1 <- myedges[-3] myvalue <- rbind(,myedges []);myvalue myvertices <- data.frame(name = unique(c(as.character(myedges
王诗翔呀
2020/07/06
2K0
医学统计与R语言:圆形树状图(circular dendrogram)
R语言ggtree画圆形的树状图展示聚类分析的结果
那么圆形的树状图如何实现呢?我查找了一下相关资料。R语言包dendextend这个包可以实现,利用help(package="dendextend")查看帮助文档,能够看到其中的一个小例子
用户7010445
2020/11/13
3.6K0
R语言ggtree画圆形的树状图展示聚类分析的结果
R语言ggplot2做玫瑰图(花瓣图)的简单小例子
今天在一个交流群里看到有人问这个图如何实现?这种图叫玫瑰图或者花瓣图,如果使用R语言的ggplot2来做的话, 比较常规的实现办法是先做柱形图,然后再用极坐标,比如
用户7010445
2021/09/22
4.2K0
R 案例|绘制不同分布的 QQ 图
论文中需要绘制数据对于不同分布假定下的 QQ 图。这里小编主要是使用 qqplotr 包进行绘制,参考的博客:An Introduction to qqplotr[1]。
庄闪闪
2022/05/24
2.8K0
R 案例|绘制不同分布的 QQ 图
12个ggplot2扩展包帮你实现更强大的可视化
ggplot2自从2007年推出以来,成为世界范围内下载最频繁、使用最广泛的R包之一。许多人包括ggplot2的创建人Hadley Wickham将这一成功归功于ggplot2背后的哲学。这个软件包的灵感来源于Leland Wilkinson编写的《图形语法》一书,在此书中将graphs 分解成scales和layers,并将原始数据与表现形式分离开。
1480
2019/07/15
1.5K0
12个ggplot2扩展包帮你实现更强大的可视化
树状图(Tree Map)
▼ 树状图(treemap)是一种经常用来展示多层级数据的分析工具。主要是使用矩形的面积、颜色、来显示复杂的层级数据关系,能够直观体现同级数据之间的比较。 exce2010及以下版本的内置图表库中没有
数据小磨坊
2018/04/10
4.6K0
树状图(Tree Map)
Excel图表技巧09:创建上下不同颜色的面积图
1. 选择日期列和变化列,单击功能区“插入”选项卡“图表”组中的“二维面积图”,得到如下图3所示的图表。
fanjy
2021/02/05
2.8K0
R语言ggplot2做云雨图的简单小例子
是一半的小提琴图加散点图的组合,看起来有些像云朵加雨滴的形式,所以得名云雨图,主要的作用还是用来展示数据的分布情况
用户7010445
2021/07/30
2K0
Python: 屏幕取色器(识别屏幕上不同位置的颜色)
文章背景:工作中,有时候需要判断图片中不同位置的颜色。有些颜色不太容易区分,所以想通过Python编写代码,通过屏幕取点,获取某个位置的颜色值。
Exploring
2022/09/20
5.1K0
Python:  屏幕取色器(识别屏幕上不同位置的颜色)
树状图js的实现方法
本文是基于决策树的需求做的前期demo实现,所以以二叉树为实现目标。基本术语如下:
用户5317830
2021/01/19
4K0
树状图js的实现方法

相似问题

添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文