Plotly域变量解释(多图)

时间:2017-03-06 23:13:21

标签: python plotly

我正在查看以下教程https://plot.ly/python/pie-charts/的“饼图子图”部分(页面上的最后一部分)。

在一次绘制多个图表时,我无法弄清楚如何理解域变量。例如:

        {
        'labels': ['1st', '2nd', '3rd', '4th', '5th'],
        'values': [38, 27, 18, 10, 7],
        'type': 'pie',
        'name': 'Starry Night',
        'marker': {'colors': ['rgb(56, 75, 126)',
                              'rgb(18, 36, 37)',
                              'rgb(34, 53, 101)',
                              'rgb(36, 55, 57)',
                              'rgb(6, 4, 4)']},
        'domain': {'x': [0, .48],
                   'y': [0, .49]},
        'hoverinfo':'label+percent+name',
        'textinfo':'none'
    },

将在左下角坐标中绘制饼图。

有人可以解释一下域变量(及其x和y组件)在实践中是如何工作的吗?

1 个答案:

答案 0 :(得分:3)

我们只是使用Javascript,因为它可以在这里执行。域属性在Python和Javascript中是相同的。

来自documentation

  

domain

     

x(数组)

     

默认值:[0,1]

     

设置此饼图轨迹的水平域(在绘图分数中)。     每个对象都有一个或多个下面列出的键。

数组的第一个成员是起始位置,第二个成员是结束位置。

x 0表示一直向左,1一直向右。

对于y 0是最高的,1是最低的。

e.g。左上象限为x = [0, 0.5]y = [0, 0.5]

如果您有多个图,例如在下面的示例中,有两个div,每个有4个图,每个图的域指定它占用的空间。在第一个例子中,每个图得到可用空间的四分之一(即x和y设置为0到0.5或0.5到1)。

在第二个示例中,最后一个图的domain与其他域重叠(0.25到0.75)。

在第三个例子中,最后一个图的domain更大,与其余图重叠(0到0.75)。

简而言之,domain只是指定总绘图区域的哪个空间被子图占用。

var allValues = [
  [50, 30, 20],
  [45, 30, 25],
  [55, 25, 20],
  [50, 15, 35]
];

var data = [{
  values: allValues[0],
  type: 'pie',
  domain: {
    x: [0, .5],
    y: [0, .5]
  },
}, {
  values: allValues[1],
  type: 'pie',
  domain: {
    x: [0.5, 1],
    y: [0, .5]
  }
}, {
  values: allValues[2],
  type: 'pie',
  domain: {
    x: [0, .5],
    y: [.5, 1]
  }
}, {
  values: allValues[3],
  type: 'pie',
  domain: {
    x: [0.5, 1],
    y: [0.5, 1]
  },
}];



Plotly.newPlot('myDiv', data);
data[3].domain.x = [0.25, 0.75];
data[3].domain.y = [0.25, 0.75];

Plotly.newPlot('myDiv2', data);

data[3].domain.x = [0.0, 0.75];
data[3].domain.y = [0.0, 0.75];
Plotly.newPlot('myDiv3', data);
<div id='myDiv'></div>
<div id='myDiv2'></div>
<div id='myDiv3'></div>

<script src="https://cdn.plot.ly/plotly-latest.min.js"></script>