我有一个plotly.js条形图,我试图得到分类轴的顺序正确.每个类别都有一个单独的栏,但有时它们是绿色的,有时它们是黄色的.条形应该从最高到最低顺序排列,但似乎根据不同的填充顺序排列它们.
数据:
var data = [
{
"marker": {
"color": "#006666"
},
"x": ["A:0122", "A:0121", "A:0434", "A:0838", "A:0083", "A:0081", "A:0687"],
"y": [1246.0, 1096.0, 1000.0, 200.0, 0.0, 0.0, 0.0],
"name": "Green",
"type": "bar"
},
{
"marker": {
"color": "#C87B31"
},
"x": ["A:0169", "A:0175"],
"y": [270.0, 0.0],
"name": "Yellow",
"type": "bar"
}
];
Run Code Online (Sandbox Code Playgroud)
布局:
var layout = {
"margin": {
"t": 0
},
"barmode": "stack",
"tickangle": -90,
"showlegend": true,
"xaxis": {
"title": "Idea",
"tickmode": "array",
"tickvals": ["A:0122", "A:0121", "A:0434", "A:0169", "A:0838", "A:0083", "A:0175", "A:0081", "A:0687"]
},
"yaxis": {
"title": "Result"
}
};
Run Code Online (Sandbox Code Playgroud)
其他配置:
{"showLink":false, "displaylogo":false}
Run Code Online (Sandbox Code Playgroud)
但结果如下:
请注意,"A:0169"应该是第四个栏,但它是最后一个.
如何使条形符合我指定的顺序tickvals?或者我可以用不同的方式指定订单吗?
小智 8
您可以设置x和tickvals有序数组,然后使用ticktextie数据添加xaxis标签:
[{
"marker": {"color": "#006666"},
"x": [0, 1, 2, 4, 5, 7, 8],
"y": [1246.0, 1096.0, 1000.0, 200.0, 0.0, 0.0, 0.0],
"name": "Green",
"type": "bar"
}, {
"marker": {"color": "#C87B31"},
"x": [3, 6],
"y": [270.0, 0.0],
"name": "Yellow",
"type": "bar"
}],
Run Code Online (Sandbox Code Playgroud)
布局:
{
"margin": {"t": 0},
"barmode": "stack",
"tickangle": -90,
"showlegend": true,
"xaxis": {
"title": "Idea",
"tickmode": "array",
"tickvals": [0, 1, 2, 3, 4, 5, 6, 7, 8],
"ticktext": ["A:0122", "A:0121", "A:0434", "A:0169", "A:0838", "A:0083",
"A:0175", "A:0081", "A:0687"]
},
"yaxis": {
"title": "Result"
}}
Run Code Online (Sandbox Code Playgroud)

或者,如果您只关心条形图的颜色,则可以绘制一条轨迹并将颜色设置为数组:
var data = [{
"x": ["A:0122", "A:0121", "A:0434", "A:0169", "A:0838", "A:0083",
"A:0175", "A:0081", "A:0687"],
"y": [1246.0, 1096.0, 1000.0, 270.0, 200.0, 0.0, 0.0, 0.0, 0.0],
"type": "bar",
"marker": {"color": ["#006666", "#006666", "#006666", "#C87B31",
"#006666", "#006666", "#C87B31", "#006666"]}
}],
layout = {
"margin": {"t": 0},
"xaxis": {"title": "Idea"},
"yaxis": {"title": "Result"}
};
Run Code Online (Sandbox Code Playgroud)
从Plotly.js 1.10.2 开始,您可以使用categoryorder和categoryarray来控制分类轴的顺序。这样您就可以保留x为字符串列表。
用法:
var data = [
{
"x": ["A", "D", "B"],
"y": [1, 2, 3],
"type": "bar"
},
{
"x": ["C", "E"],
"y": [2, 3],
"type": "bar"
}];
var layout = {
"xaxis": {
"categoryorder": "array",
"categoryarray": ["A", "B", "C", "D", "E"]
}
};
Run Code Online (Sandbox Code Playgroud)
对于您的确切示例:
var data = [{
"marker": {
"color": "#006666"
},
"x": ["A:0122", "A:0121", "A:0434", "A:0838", "A:0083", "A:0081", "A:0687"],
"y": [1246.0, 1096.0, 1000.0, 200.0, 0.0, 0.0, 0.0],
"name": "Green",
"type": "bar"
}, {
"marker": {
"color": "#C87B31"
},
"x": ["A:0169", "A:0175"],
"y": [270.0, 0.0],
"name": "Yellow",
"type": "bar"
}];
var layout = {
"margin": {
"t": 0
},
"barmode": "stack",
"tickangle": -90,
"showlegend": true,
"xaxis": {
"title": "Idea",
"categoryorder": "array",
"categoryarray": ["A:0122", "A:0121", "A:0434", "A:0169", "A:0838", "A:0083", "A:0175", "A:0081", "A:0687"]
},
"yaxis": {
"title": "Result"
}
};
Run Code Online (Sandbox Code Playgroud)
结果:
| 归档时间: |
|
| 查看次数: |
2707 次 |
| 最近记录: |