Удаление зазоров между подзаголовками [дубликат]

Многие многочисленные дубликаты этого вопроса задают вопрос о влиянии округления с плавающей запятой на конкретные числа. На практике легче понять, как это работает, глядя на точные результаты вычислений, а не просто на чтение. Некоторые языки предоставляют способы сделать это - например, преобразование float или double в BigDecimal в Java.

Так как это вопрос, связанный с языком, ему нужны языковые агностические инструменты, такие как как Десятичный преобразование с плавающей запятой .

Применяя его к числам в вопросе, рассматриваемым как удваивает:

0,1 преобразуется в 0,1000000000000000055511151231257827021181583404541015625,

0,2 преобразуется в 0.200000000000000011102230246251565404236316680908203125,

0,3 конвертируется в 0,29999999999999999989897769753748434595763683319091796875 и

0,30000000000000004 преобразуется в 0,3000000000000000444089209850062616169452667236328125.

Добавление первых двух чисел вручную или в десятичный калькулятор, такой как Full Precision Calculator , показывает точную сумму фактических входов: 0.3000000000000000166533453693773481063544750213623046875.

Если округлить до эквивалента 0,3, ошибка округления будет 0.0000000000000000277555756156289135105907917022705078125. Округление до эквивалента 0,30000000000000004 также дает ошибку округления 0,0000000000000000277555756156289135105907917022705078125.

Возвращаясь к конвертеру с плавающей запятой, необработанный шестнадцатеричный показатель для 0.30000000000000004 равен 3fd3333333333334, который заканчивается четной цифрой и, следовательно, является правильным результатом.

57
задан Gabriel 10 February 2016 в 16:47
поделиться

4 ответа

Вы можете использовать gridspec для управления расстоянием между осями. Здесь больше информации .

import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec

plt.figure(figsize = (4,4))
gs1 = gridspec.GridSpec(4, 4)
gs1.update(wspace=0.025, hspace=0.05) # set the spacing between axes. 

for i in range(16):
   # i = i + 1 # grid spec indexes from 0
    ax1 = plt.subplot(gs1[i])
    plt.axis('on')
    ax1.set_xticklabels([])
    ax1.set_yticklabels([])
    ax1.set_aspect('equal')
    plt.subp

plt.show()

axes very close together [/g2]

55
ответ дан Molly 27 August 2018 в 04:49
поделиться

Вы пробовали plt.tight_layout()?

с помощью plt.tight_layout() enter image description here [/g0] без него: enter image description here [/g1]

Или: что-то вроде этого (используйте add_axes)

left=[0.1,0.3,0.5,0.7]
width=[0.2,0.2, 0.2, 0.2]
rectLS=[]
for x in left:
   for y in left:
       rectLS.append([x, y, 0.2, 0.2])
axLS=[]
fig=plt.figure()
axLS.append(fig.add_axes(rectLS[0]))
for i in [1,2,3]:
     axLS.append(fig.add_axes(rectLS[i],sharey=axLS[-1]))    
axLS.append(fig.add_axes(rectLS[4]))
for i in [1,2,3]:
     axLS.append(fig.add_axes(rectLS[i+4],sharex=axLS[i],sharey=axLS[-1]))
axLS.append(fig.add_axes(rectLS[8]))
for i in [5,6,7]:
     axLS.append(fig.add_axes(rectLS[i+4],sharex=axLS[i],sharey=axLS[-1]))     
axLS.append(fig.add_axes(rectLS[12]))
for i in [9,10,11]:
     axLS.append(fig.add_axes(rectLS[i+4],sharex=axLS[i],sharey=axLS[-1]))

Если вам не нужно обмениваться осями, просто axLS=map(fig.add_axes, rectLS) enter image description here [/g2]

2
ответ дан CT Zhu 27 August 2018 в 04:49
поделиться

Не прибегая к gridspec , для удаления пробелов также можно использовать следующее: установив wspace и hspace в ноль:

import matplotlib.pyplot as plt

plt.clf()
f, axarr = plt.subplots(4, 4, gridspec_kw = {'wspace':0, 'hspace':0})

for i, ax in enumerate(f.axes):
    ax.grid('on', linestyle='--')
    ax.set_xticklabels([])
    ax.set_yticklabels([])

plt.show()
plt.close()

Результат:

11
ответ дан KutalmisB 27 August 2018 в 04:49
поделиться

Проблема заключается в использовании функции aspect='equal', которая предотвращает растяжение подзаголовков до произвольного соотношения сторон и заполнение всего пустого пространства.

Обычно это будет работать:

import matplotlib.pyplot as plt

ax = [plt.subplot(2,2,i+1) for i in range(4)]

for a in ax:
    a.set_xticklabels([])
    a.set_yticklabels([])

plt.subplots_adjust(wspace=0, hspace=0)

В результате получается следующее:

Однако с aspect='equal', как в следующем коде:

import matplotlib.pyplot as plt

ax = [plt.subplot(2,2,i+1) for i in range(4)]

for a in ax:
    a.set_xticklabels([])
    a.set_yticklabels([])
    a.set_aspect('equal')

plt.subplots_adjust(wspace=0, hspace=0)

Это то, что мы получаем:

Разница во втором случае заключается в том, что вы вынули оси x и y иметь одинаковое количество единиц / пикселей. Так как оси по умолчанию меняются от 0 до 1 (т. Е. Перед тем, как вы рисуете что-либо), использование aspect='equal' заставляет каждую ось быть квадратом. Поскольку рисунок не является квадратом, пипло добавляет дополнительное расстояние между осями по горизонтали.

Чтобы обойти эту проблему, вы можете установить, что ваша фигура имеет правильное соотношение сторон. Мы собираемся использовать объектно-ориентированный интерфейс pyplot, который я считаю превосходным в целом:

import matplotlib.pyplot as plt

fig = plt.figure(figsize=(8,8)) # Notice the equal aspect ratio
ax = [fig.add_subplot(2,2,i+1) for i in range(4)]

for a in ax:
    a.set_xticklabels([])
    a.set_yticklabels([])
    a.set_aspect('equal')

fig.subplots_adjust(wspace=0, hspace=0)

Вот результат:

54
ответ дан Thucydides411 27 August 2018 в 04:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: