Сломанные оси x и y в matplotlib

Я пытаюсь построить сломанные оси y и x. Я написал очень простой код, используя ответы на предыдущие вопросы. Однако я не понимаю, почему мой график не идет слева от сломанной оси x и вниз от сломанной оси y. Я прикрепляю сюда свой файл данных для a.txt и b.dat. Мой код читается как

from numpy import *
from pylab import *
import numpy as np
from matplotlib import *
import matplotlib as mpl
import os
from math import ceil
from scipy.interpolate import interp1d
from brokenaxes import brokenaxes


path = os.getcwd()+"/"
symm_type="eb"
flag_include_other_limits=True

mpl.rcParams['xtick.labelsize']=20
mpl.rcParams['ytick.labelsize']=20
mpl.rcParams['legend.fontsize']=20
mpl.rcParams['legend.borderpad']=0.8
mpl.rcParams['ps.fonttype']=42
mpl.rcParams['pdf.fonttype']=42
mpl.rcParams['font.family'] = 'serif'
mpl.rcParams['font.serif'] = ['Times New Roman'] + plt.rcParams['font.serif']

print("Plot_Limit_M_G: Plotting limits on (m,g)...")

fig = plt.figure(figsize=[9,9])
bax = brokenaxes(xlims=((1e-35, 1e-10), (1e-3, 1e1)), ylims=((1e-32, 1e-24), (1e-6, 1e-3)), hspace=.05)
bax_xticks_major = np.array([1.e-35, 1.e-30, 1.e-25, 1.e-20, 1.e-15, 1.e-10, 1e-3, 1e-2, 1e-1, 1e1])
bax.set_xscale('log')
bax.set_yscale('log')
x = np.logspace(-35, 1, 100)
y = np.logspace(-32, -3,100)
lst_colors = ['#f51d11', '#08c252', '#11a9f5', '#FF00FF', '#b166d1']
lst_styles = ['-', '--', ':', '--', '.-']

lst_limits3 = Read_Data_File(path+"b.dat")
lst_m3 = [ 10.**lst_limits3[0][j] for j in range(len(lst_limits3[0])) ]
lst_g_hi_20153 = [10.**lst_limits3[1][j] for j in range(len(lst_limits3[1]))]
bax.plot(lst_m3, lst_g_hi_20153, color='#FF00FF', ls='dashed', lw=2.5, zorder=20)

lst_limits5 = Read_Data_File(path+"a.txt")
lst_m5 = [ 10.**lst_limits5[0][j] for j in range(len(lst_limits5[0])) ]
lst_g_hi_20155 = [10.**lst_limits5[1][j] for j in range(len(lst_limits5[1]))]
bax.plot(lst_m5, lst_g_hi_20155, color='#b166d1', ls='dashed', lw=2.5, zorder=20)

pylab.savefig("outfile.pdf", bbox_inches='tight', dpi=200)
plt.show()
plt.close()
path = os.getcwd()+"/"

Я попробовал приведенный выше код и ожидал, что график будет варьироваться от 10 ^ {- 35} до 10 ^ {- 10} по оси X, затем прервется и снова начнется с 10 ^ {- 3} до 10 ^ {1}. По оси Y я хотел, чтобы он отображался от 10 ^ {- 32} до 10 ^ {- 24}, а затем прерывался и отображался от 10 ^ {- 6} до 10 ^ {- 3}. Но это не показывает.

Интересно, зависят ли небольшие ответы, которые вы получили, от устрашающего характера вашего фрагмента кода (все эти imports!), а также от его невоспроизводимости (данные не предоставлены). Я думаю, если вы поработаете над созданием минимального воспроизводимого примера, вы сможете получить гораздо больше помощи и, возможно, решить свою проблему самостоятельно…

gboffi 18.11.2022 12:11

@gboffi Я прикрепил свой файл данных в форматах .txt и b.dat. Если вы нажмете на них, вы сможете загрузить эти файлы данных. Что касается импорта, сценарий, который я привожу здесь, представляет собой очень небольшой сценарий всего. Я не все очистил перед копированием сюда. Я прошу прощения за это. Но, пожалуйста, помогите.

Masoom 18.11.2022 13:09

Взгляните на это: matplotlib.org/3.1.0/gallery/subplots_axes_and_figures/… Идея состоит в том, чтобы отобразить одни и те же данные на двух осях с последующей настройкой видимости разных частей осей.

learner 18.11.2022 15:04

Я установил brokenaxes и попытался воспроизвести вашу настройку — результаты меня не совсем удовлетворили (в основном, некоторые рассогласования), но в целом я получил приемлемый результат. Самое важное отличие вашего кода заключается в том, что ① я указал (согласно вводному примеру) логарифмичность при создании экземпляров сломанных осей и ② я использовал (опять же, в вводном примере) bax.loglog(...) вместо bax.plot(...)

gboffi 18.11.2022 16:43

@gboffi, не могли бы вы рассказать немного подробнее? Например, когда вы говорите, что ввели логарифмичность раньше, что именно это означает? Я относительно новичок в python, и его сложно понять.

Masoom 18.11.2022 18:39
pypi.org/project/brokenaxes — прокрутите вниз до абзаца «Логовые весы», я скопировал этот код и поместил в него ваши xlimits, ylimits, затем я нарисовал некоторые фейковые вещи, и это почти сработало.
gboffi 18.11.2022 19:42

@gboffi Я следовал тому же примеру для этого скрипта, и я не могу получить даже тот же кадр с моими ограничениями по x и y. Я написал свою проблему явно. Я не могу получить левую часть оси x и нижнюю часть оси y. Я получаю только свои оси x и y после сломанной части. Не могли бы вы хотя бы прислать мне код фрейма, если вы в состоянии это сделать. Я могу взять это оттуда.

Masoom 19.11.2022 03:35
Шаблоны Angular PrimeNg
Шаблоны Angular PrimeNg
Как привнести проверку типов в наши шаблоны Angular, использующие компоненты библиотеки PrimeNg, и настроить их отображение с помощью встроенной...
Создайте ползком, похожим на звездные войны, с помощью CSS и Javascript
Создайте ползком, похожим на звездные войны, с помощью CSS и Javascript
Если вы веб-разработчик (или хотите им стать), то вы наверняка гик и вам нравятся "Звездные войны". А как бы вы хотели, чтобы фоном для вашего...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Начала с розового дизайна
Начала с розового дизайна
Pink Design - это система дизайна Appwrite с открытым исходным кодом для создания последовательных и многократно используемых пользовательских...
Шлюз в PHP
Шлюз в PHP
API-шлюз (AG) - это сервер, который действует как единая точка входа для набора микросервисов.
14 Задание: Типы данных и структуры данных Python для DevOps
14 Задание: Типы данных и структуры данных Python для DevOps
проверить тип данных используемой переменной, мы можем просто написать: your_variable=100
0
7
58
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это работает, вроде как, с вашими ограничениями для частичных осей. Есть ряд раздражающих артефактов, но, в принципе, это работает.

from matplotlib.pyplot import figure
from brokenaxes import brokenaxes
from numpy import logspace

x = logspace(-35, +1, 100)
y = logspace(-32, -3, 100)

fig = figure()
bax = brokenaxes(xlims=((1E-35, 1E-10), (1E-3, 10)),
                 ylims=((0.8E-32, 1E-24), (1E-6, 2e-3)),
                 xscale='log', yscale='log')
bax.loglog(x, y, label='...')
bax.legend(loc=8)
bax.grid(axis='both', which='major', ls='-')
bax.set_xlabel('x')
bax.set_ylabel('y')
fig.show()

Спасибо тебе за это. По крайней мере, теперь я могу воспроизвести кадр, возможно, я смогу перенести свои данные. Еще раз спасибо! Однако мы не видим незначительных тиков в логарифмической шкале по оси y или x. Есть ли способ исправить это? Я попытался указать это явно, как в моем коде, если вы видите, «xtics_major». Но это не работает. У меня тики только выше яксиса.

Masoom 20.11.2022 14:09

Как я уже писал "Есть ряд раздражающих артефактов". Я думаю, что вы должны исправить код brokenaxes или перейти к основам, используя только Matplotlib для этого урока.

gboffi 20.11.2022 15:23

Другие вопросы по теме