如何用RVisualization 输出X轴,y轴的双轴百分比堆积条形图

本文介绍如何使用RScript在Power BI中创建一个双轴百分比堆积条形图,满足用户对渠道占比和品牌占比的可视化需求。通过加载ggplot2等库,处理数据并绘制图形,实现自定义的条形图,其中X轴表示渠道的占比,Y轴表示品牌的在各渠道的占比。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

用户需求:

在最近的POWER BI项目,用户的需求如下:

实现在x轴按渠道的占比显示宽度,在y轴按品牌的在各个渠道的占比显示高度。

Power BI有个控件可以实现改需求,但是这是一个付费控件。我们最终使用R Script Visual实现需求。

实现效果: 

带代码摘抄:

# The following code to create a dataframe and remove duplicated rows is always executed and acts as a preamble for your script:

# dataset <- data.frame(ChannelName, BrandName, Other TY)

# dataset <- unique(dataset)

# Paste or type your script code here:

library(ggplot2)

library(RColorBrewer)

library(reshape2) #提供melt()函数

library(plyr) #提供ddply()函数,join()函数

library(scales) #引入percent

columnTest <- isTRUE(nrow(dataset)>4)

if(columnTest) {

#按渠道,排名排序

df <-dataset[order(dataset$ChannelName,dataset$OtherTopN),]

names(df)<-c("Channel","Brand","Topn","Gr","Bps","BpsL","Unit","Value","ValueLY")

#消除空值错误

df[is.na(df)] = 0

l_unit = df[1,7]

dfch<-df[,c(1,6)]

dfch <- unique(dfch)

#按渠道求和

dfchsum <- aggregate(cbind(df$Value, df$ValueLY), by=list(df$Channel), FUN=sum)

names(dfchsum)<- c("Channel","Value","ValueLY")

#人工缩放x轴宽度

dfchsum <-dfchsum[order(dfchsum$Value),]

l_CPert<- 0

c_CPert<- 0

l_total <- sum(dfchsum$Value)

for (i in 1:nrow(dfchsum)){ #行-->渠道

dfchsum[i,"CPert"] <- dfchsum[i,2] / l_total * 100 #将各个渠道的占比

dfchsum[i,"CGr"] <- (dfchsum[i,2] / dfchsum[i,3] - 1)*100 #该渠道增长

dfchsum[i,"Bps"]<- dfch$Bps[dfch$Channel == dfchsum[i,1] ]

c

### 创建带双轴的混合柱状图和折线图 为了在 ECharts 中创建一个带有双侧坐标(左侧和右侧)并结合柱状图与折线图的图表,需遵循特定配置方法。此过程涉及设置多个 `yAxis` 和相应的序列来区分不同类型的图形展示。 #### 配置项详解 - **全局配置**:初始化时设定基本参数,如标题、提示框等通用组件。 - **X (category)**:作为共同的时间或其他类别维度基础,用于同步两种不同类型的数据点位置。 - **Y (value)**:定义两个独立的价值衡量标准——左 Y 服务于柱状图;右 Y 则关联到折线图。这允许在同一视图中比较具有不同量级或单位的数据集[^1]。 ```javascript option = { title: { text: '国内生产总值及其增长情况' }, tooltip: { trigger: 'axis' }, // 提示框组件,默认显示所有系列的信息 legend: { data:['GDP', 'Growth Rate'] }, // 图例组件,方便用户切换查看不同的数据系列 xAxis: [ { type: 'category', boundaryGap: false, data: ['周一','周二','周三','周四','周五'] } ], yAxis: [ { name: '金额(万亿元)', type: 'value' }, { name: '%', type: 'value', position: 'right' } ], series : [ { name:'GDP', type:'bar', itemStyle:{emphasis:{focus:'series'}}, label:{ show:true, position:'top' }, data:[59, 65, 68, 73, 82], markPoint : { data : [ {type : 'max', name: '最大值'}, {type : 'min', name: '最小值'} ] } }, { name:'Growth Rate', type:'line', smooth:true, yAxisIndex: 1, label:{ show:true }, data:[7.8, 7.4, 7.0, 6.6, 6.9] } ] }; ``` 上述代码片段展示了如何构建这样一个复杂的可视化效果,在这里: - 使用了两个 `yAxis` 来分别处理 GDP 数字以及增长率百分比; - 对于每种图表类型设置了具体的样式选项,比如线条是否平滑(`smooth`)或是条形的高度标记(`label`); - 数据源部分包含了具体数值列表,这些代表了一周内每一天对应指标的表现[^2].
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值