首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在一个堆叠的条形图中,每个部分的颜色不同。

在一个堆叠的条形图中,每个部分的颜色不同。
EN

Stack Overflow用户
提问于 2017-08-16 16:41:29
回答 3查看 1.5K关注 0票数 2

我下面有一个堆叠的酒吧地皮:-

这是使用以下方法生成的:

代码语言:javascript
运行
AI代码解释
复制
b = barh(1:3,rand(3,2),'stacked');

现在我有了一个3x2单元C,每个单元元素都是一个1x3RGB数组。

代码语言:javascript
运行
AI代码解释
复制
C = cell(3,2);
for i = 1:3
  for j = 1:2
    C{i,j} = rand(1,3);
  end
end

图中有6个方框和6个相应的颜色。我想在方框中填充这些指定的颜色。我想用这个方法:

代码语言:javascript
运行
AI代码解释
复制
b(1).Parent.Parent.Colormap = C;

..。但这不起作用。

有人能建议如何使用控制每个条形段颜色的能力来绘制自定义的堆叠条形图吗?我不认为修改MATALB的bar命令会有帮助。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-08-17 11:29:21

您需要复制和操作bar (或barh)函数返回的图形对象。

bar(y, 'stacked')y中的每一列返回一个条形图对象。图形对象具有XDataYData字段,它们控制条形段的位置和大小。因为来自同一列的所有部分都共享图形对象,所以不能独立地操作颜色。

例如,如果y是2x3矩阵,则bar返回3个图形对象。每个物体都有:

  • XData,一个包含条形索引的1x2向量
  • YData,一个1x2向量,每个元素都是区段的高度。
  • FaceColor,所有这些部分共享的颜色

我的代码复制了这些图形对象,因此,与具有1x2 XDataYData字段的3个图形对象不同,还有6个具有1x1 XDataYData字段的图形对象,每个都有一个唯一的FaceColor

从正常的barbarh图开始

代码语言:javascript
运行
AI代码解释
复制
figure;
n_bars = 2;
n_sections = 3;

%Initialize the bar graph with default coloring
b = bar(rand(n_bars, n_sections), 'stacked');

现在,制作一个新的图形,用被操纵的颜色来保存情节。

代码语言:javascript
运行
AI代码解释
复制
%Make new figure with new color scheme
f = figure;
a = axes('Parent', f);

%Colors
C = rand(6, 3);

对于原始的每个图形对象,复制两个副本。

代码语言:javascript
运行
AI代码解释
复制
for jj = 1:n_sections
  %Duplicate the bar graphics object results 
  section1 = copyobj(b(jj), a);
  section2 = copyobj(b(jj), a);

  % Remove one of the bars from each section
  section1.YData(1) = 0;
  section2.YData(2) = 0;

  %Change the color
  section1.FaceColor = C(sub2ind([n_bars, n_sections], 1, jj), :);
  section2.FaceColor = C(sub2ind([n_bars, n_sections], 2, jj), :);
end

之前和之后!

票数 2
EN

Stack Overflow用户

发布于 2017-08-18 05:57:42

这样做的目的是为每个数据行创建一个单独的图表,否则我们就无法获得单个条形对象句柄。

代码语言:javascript
运行
AI代码解释
复制
ydata = rand(3,2); cdata={'r','g'; 'b','y';'c','k';'g','b'};
numplots = size(ydata,1);
h=zeros(numplots,2);
figure, hold on
for k=1:numplots,
    h(k,:) = barh(nan(size(ydata)),'stacked');
    set(h(k,1),'FaceColor',cdata{k,1});
    set(h(k,2),'FaceColor',cdata{k,2});
    tmp_ydata = get(h(k,1),'YData');
    tmp_ydata(k) = ydata(k,1); 
    set(h(k,1),'YData',tmp_ydata);
    tmp_ydata = get(h(k,2),'YData');
    tmp_ydata(k) = ydata(k,2);
    set(h(k,2),'YData',tmp_ydata);
end
hold off 

有关详细信息,请参阅MATLAB图形学上的Mike发布的“图表的高亮部分”

票数 1
EN

Stack Overflow用户

发布于 2017-08-18 10:18:57

根据塞西莉亚的回答,这是一个更普遍的解决办法。

代码语言:javascript
运行
AI代码解释
复制
n_bars = 3;
n_sections = 4;
b = barh(rand(n_bars, n_sections), 'stacked');

f = figure;
a = axes('Parent', f);
C = rand(n_bars*n_sections, 3);
for jj = 1:n_sections
    for ii=1:n_bars
        section=copyobj(b(jj), a);
        dummy=1:n_bars;
        dummy(dummy==ii)=[];
        section.YData(dummy) = 0;
        section.FaceColor = C(sub2ind([n_bars, n_sections], ii, jj), :);
    end
end

对于n_barsn_sections的任何值,这都是可行的。如果有人可以建议矢量化或更有效的实现,请这样做。

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

https://stackoverflow.com/questions/45724976

复制
相关文章
在 Web 中获取 MAC 地址
两年前做的一个项目,当时客户的需求还没有完成,客户就提出了解决安全的问题,这是当时写的一个记录,分享到这里。
码农UP2U
2020/08/26
15.8K4
如何设置谷歌浏览器在新窗口中打开链接?如何设置谷歌浏览器在新标签页中打开链接?
一、快捷键方式:   1、左键单击 ==》 在当前窗口中打开目标网页。   2、Shift + 左键单击 ==》 在新窗口中打开目标网页。   3、Ctrl + 左键单击 ==》 在新标签页中打开目标
黑泽君
2018/10/11
116.8K0
React中使用ajax获取数据在移动浏览器中不显示问题
这个问题困扰了我半个月的时间,今天终于解决了。 在做的一个小项目,页面加载后使用ajax读取本地REST数据,保存在状态中,稍后在form的选择下拉框中显示,代码如下:
fanzhh
2019/08/20
6K0
使用async批量获取博客链接
主要使用了superagent cheerio async 目的获取所有的博客链接,需要的参数有 博客地址 以及 总页码 let superagent = require('superagent') let cheerio = require('cheerio') const async = require('async') let baseBlogLink = 'https://fizzz.blog.csdn.net/' // 博客地址 let articleSelector = '.articl
拿我格子衫来
2022/01/24
4130
使用async批量获取博客链接
在IE中启动火狐——自定义浏览器链接协议
有时候需求就是这么奇葩,特别是在这个浏览器混战收尾的节骨眼上,有的客户正在将全单位的浏览器统一到Chrome、有的正在统一到Firefox、还有的正在统一到360上。于是就有了如题的需求,客户正在将浏览器统一到某一B浏览器,但是当前系统还运行在A浏览器上,需要在A浏览器所兼容的系统S1中点击某链接,自动用B打开S2系统。
用户1183026
2019/05/25
1.3K0
获取网页中超链接PY源码
关于源码的使用 使用了request,bs4的库 可以用来抓取网页中的超链接(可以设置规则)。并写入到url.txt中。 我是用来抓创意工坊的mod超链接的。只是做个笔记。方便寻找。 各路大佬也可以来指点指点。 from urllib.request import urlopen from bs4 import BeautifulSoup import ssl ssl._create_default_https_context = ssl._create_unverified_context url =
impdx-忧郁的派大星
2020/11/03
4760
使用Jupyterlite在浏览器中运行Jupyter Notebook
Jupyter是一个交互式的 Python 开发环境,以 Ipython Kernel 为执行引擎,支持多种前端(Jupyter Notebook,Jupyter Lab,VS Code Jupyter 拓展),围绕.ipynb 格式的 notebook 文件,支持将代码、文档、图表、数学公式等内容整合在一起,方便用户进行交互式的开发。
杜逸先
2023/04/13
2.8K0
使用Jupyterlite在浏览器中运行Jupyter Notebook
js获取url链接中的域名部分
因为一个正确的url必定是由http://或者是https://、domain、路径/参数组成,所以可以用split以/进行分割成数组,取第3部分就是域名了。
全栈程序员站长
2022/07/08
9.3K0
使用 MediaStream Recording API 和 Web Audio API 在浏览器中处理音频(未完待续)
最近项目上有个需求,需要实现:录音、回放录音、实现音频可视化效果、上传wav格式的录音等功能。于是乎,我就顺便调研了下如何在浏览器中处理音频,发现 HTML5 中有专门的API用来处理音频。
zhaokang555
2023/10/17
6470
使用 MediaStream Recording API 和 Web Audio API 在浏览器中处理音频(未完待续)
Web浏览器中的JavaScript
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
奋飛
2019/08/15
7050
python使用pycurl获取web连
#!/usr/bin/python # _*_ coding:utf-8 _*_ import sys,os import time import pycurl url = "http://www.qq.com" #探测的目标URL c = pycurl.Curl() #创建一个Curl对象 c.setopt(c.URL,url) #定义请求的URL常量 c.setopt(c.CONNECTTIMEOUT,5) #定义请求连接的等待时间 c.setopt(c.TIMEOUT,5)
py3study
2020/01/07
1.2K0
PHP 获取指定 URL 页面中的所有链接
以下代码可以获取到指定 URL 页面中的所有链接,即所有 a 标签的 href 属性:
Z4
2020/04/22
7.7K0
html中超链接使用_HTML超链接代码
html超链接的写法是e69da5e6ba903231313335323631343130323136353331333431353431使用a标签,如:百度一下,你就知道。
全栈程序员站长
2022/09/18
1.3K0
nuScenes数据集在OpenPCDet中的使用及其获取
从官方网站上下载数据NuScenes 3D object detection dataset,没注册的需要注册后下载。 注意: 如果觉得数据下载或者创建data infos有难度的,可以参考本文下方 5.
烤粽子
2021/10/08
5.6K0
获取url链接参数
/******封装获取url链接参数开始******/ getWxCode(name){ return decodeURIComponent((new RegExp('[?|&]' + name
〆 千寻、
2020/03/12
2.5K0
[海盗湾] 磁力链接批量获取
这个工具的用途就是批量获取海盗湾的磁力链接,例如:https://thepiratebay.cr/search/tokyo%20hot
obaby
2023/02/24
2.7K0
使用Gradle在嵌入式Web容器Jetty中运行Web应用
在 Maven 等构建的项目中,我们要使用 Jetty 做嵌入式 Web 容器运行 Web 应用,通常需要添加 Jetty 相关依赖以及进行类似下面代码配置:
三产
2021/01/12
1.8K0
在 Python 中使用 Selenium 打开链接
使用 Selenium 打开链接的最简单方法是使用 WebDriver 对象的 get() 方法。此方法指示浏览器导航到指定的 URL。
很酷的站长
2023/08/11
8820
在 Python 中使用 Selenium 打开链接
解决 mklink 使用中的各种坑(硬链接,软链接/符号链接,目录链接)
2018-03-08 12:23
walterlv
2018/09/18
32.8K0
利用360浏览器官方地址获取7.0版本下载链接
最近忙毕业的事情,需要部署到Windows2003系统,但是发现03系统不支持360浏览器8.0以上版本,只能支持7.0,所以去官网找了下,发现官网已经把7.0版本下架了,网上找到的版本都是打包过的备
刺_猬
2018/06/21
1.3K0

相似问题

Silverlight OOB用户菜单控件

13

是否可以动态呈现web控件?

20

是否可以在全屏模式下创建Silverlight应用程序?

11

是否可以在silverlight的浏览器外模式下更改应用程序的标题

15

在silverlight中禁用web浏览器控件上的右键单击选项

21
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

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

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档