MATLAB:条形图_修改轴上的参数
MATLAB : bar graph_ modify parameters on axis
我有一个条形图,其中包含 2 个不同的数据(每个数据的颜色都不同,如您在图片中所见)。我想移动 x-axis 使其在 y=-100 处交叉(例如)。所以如果数据 = -40,我想要一个从 -100 到 -40 的柱。
另一个问题:是否可以垂直写入 x-axis 的每个值(因为对于所有值,我们看不到任何东西)。
最后一个问题:x_axis 是否可以有 2 个不同的比例?
提前谢谢你,
此致,
这里有一些代码可以让你开始。所有内容均已注释,以便于理解:
clear
clc
close all
%// Generate dummy data
y = -90*rand(1,20);
NumY = numel(y);
HalfData = round(NumY/2);
%// Loop to color half in pink and half in blue
hold all
for k = 1:NumY
hBar = bar(k,y(k));
if k <= HalfData
set(hBar,'FaceColor',[1 0 1])
else
set(hBar,'FaceColor',[0 0 1])
end
end
hold off
%// Get xtick labels and position for future use
xtLabels = cellstr(get(gca,'XTickLabel')).';
xtPos = get(gca,'XTick');
%// Change baseline value
set(hBar,'BaseValue',-40)
%// Get baseline to change its properties if you want
hBaseL = get(hBar,'Baseline');
set(hBaseL,'LineStyle','--','Color','k','LineWidth',3)
%// Adjust axis limits. Remove labels to place them vertically
set(gca,'XLim',[0 NumY],'XTickLabel',{''})
%// Get correct position for xlabel text
YLimPoArrays = min(get(gca,'YLim'));
YLimPoArrays = repmat(YLimPoArrays,numel(xtPos),1);
%// Place text positioned vertically with a small y offset
text(xtPos,YLimPoArrays-3,xtLabels,'HorizontalAlignment','center','Rotation',90,'FontSize',15)
并且输出:
希望对您有所帮助!
我有一个条形图,其中包含 2 个不同的数据(每个数据的颜色都不同,如您在图片中所见)。我想移动 x-axis 使其在 y=-100 处交叉(例如)。所以如果数据 = -40,我想要一个从 -100 到 -40 的柱。
另一个问题:是否可以垂直写入 x-axis 的每个值(因为对于所有值,我们看不到任何东西)。
最后一个问题:x_axis 是否可以有 2 个不同的比例?
提前谢谢你,
此致,
这里有一些代码可以让你开始。所有内容均已注释,以便于理解:
clear
clc
close all
%// Generate dummy data
y = -90*rand(1,20);
NumY = numel(y);
HalfData = round(NumY/2);
%// Loop to color half in pink and half in blue
hold all
for k = 1:NumY
hBar = bar(k,y(k));
if k <= HalfData
set(hBar,'FaceColor',[1 0 1])
else
set(hBar,'FaceColor',[0 0 1])
end
end
hold off
%// Get xtick labels and position for future use
xtLabels = cellstr(get(gca,'XTickLabel')).';
xtPos = get(gca,'XTick');
%// Change baseline value
set(hBar,'BaseValue',-40)
%// Get baseline to change its properties if you want
hBaseL = get(hBar,'Baseline');
set(hBaseL,'LineStyle','--','Color','k','LineWidth',3)
%// Adjust axis limits. Remove labels to place them vertically
set(gca,'XLim',[0 NumY],'XTickLabel',{''})
%// Get correct position for xlabel text
YLimPoArrays = min(get(gca,'YLim'));
YLimPoArrays = repmat(YLimPoArrays,numel(xtPos),1);
%// Place text positioned vertically with a small y offset
text(xtPos,YLimPoArrays-3,xtLabels,'HorizontalAlignment','center','Rotation',90,'FontSize',15)
并且输出:
希望对您有所帮助!