'%10s' %'*'*x
анализируется как
('%10s' % '*') * x
, поскольку операторы
%
и*
имеют одинаковый приоритет и группу слева направо [ docs ]. Вам нужно добавить круглые скобки, например:x = 1 while x < 10: print '%10s' % ('*' * x) x = x + 1
Если вы хотите провести цикл по диапазону чисел, считается более идиоматичным использование цикла
for
, чем цикл while. Например:for x in range(1, 10): print '%10s' % ('*' * x)
for x in range(0, 10)
эквивалентноfor(int x = 0; x < 10; x++)
в Java или C.
Фактически, как вы говорите, в большинстве примеров диаграмм областей (я бы сказал, практически все) используется горизонтальная область , то есть версия, где базовая линия горизонтальна. [1133 ]
Тем не менее, очень легко создать вертикальную диаграмму площади (то есть с вертикальной базовой линией), используя D3. Для этого нужно использовать менее известные методы x1
и x0
генератора области .
Что происходит, так как почти все примеры в сети являются диаграммами горизонтальной области, вы видите только x
, y1
и y0
как методы генератора области. Тем не менее, тем же способом только x
устанавливает значение x0
в значение, а x1
- null
, y
устанавливает значение y0
и значение y1
- null
.
При этом вам просто нужно установить вертикальную базовую линию с помощью x0
. Проверьте этот пример:
const svg = d3.select("svg");
const data = [0, 80, 20, 210, 130, 270, 30, 110, 130, 0];
const areaGenerator = d3.area()
.x0(0)
.x1(d => d)
.y((_, i) => i * 15)
.curve(d3.curveMonotoneY)
const area = svg.append("path")
.attr("d", areaGenerator(data))
.style("fill", "teal");
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/5.7.0/d3.min.js"></script>
<svg></svg>
Короче говоря, это методы, которые вам нужны:
Горизонтальная диаграмма местности :
x
: положение в базовой линии y1
: расстояние от базовой линии y0
: базовая линия Диаграмма вертикальной области :
y
: положение в базовой линии x1
: расстояние от базовой линии x0
: базовый уровень