Как сделать галочку на одной оси, чтобы иметь разный размер в matplotlib? [Дубликат]

Использование ping в C # достигается с помощью метода Ping.Send(System.Net.IPAddress), который запускает запрос ping к предоставленному действительному IP-адресу или URL-адресу и получает ответ в ответ, который называется Протокол сообщений Интернета (ICMP) Packet , который содержит заголовок 20 байтов, который содержит данные ответа от сервера pinged, который получил запрос ping, пространство имен .Net framework System.Net.NetworkInformation содержит класс с именем PingReply класс, который имеет свойства, предназначенные для перевода ICMP и предоставить полезную информацию о сетях с пинговым сервером, например:

  • IPStatus: получает адрес хоста, который отправляет эхо-ответ протокола ICMP.
  • IPAddress: Получает количество миллисекунд, принятых для отправки эхо-запроса протокола управления интернет-протоколом (ICMP) и получения соответствующего сообщения эхо-ответа ICMP.
  • RoundtripTime (System.Int64) : Получает параметры, используемые для передачи ответа на сигнал протокола управления доступом к Интернету (ICMP) echo r equest.
  • PingOptions (System.Byte []) : Получает буфер данных, полученных в сообщении эхо-ответа протокола ICMP.

Ниже приведен простой пример использования WinForms для демонстрации того, как ping работает в c #, предоставив действительный IP-адрес в textBox1 и нажав button1, мы создаем экземпляр Ping class, a локальная переменная PingReply, локальная строка переменной для хранения IP-адреса или URL-адреса, затем мы назначаем локальную переменную PingReply, которую мы создали, на метод отправки ping, затем проверяем, был ли запрос успешным, сравнивая состояние ответа к состоянию свойства IPAddress.Success, затем мы извлекаем из PingReply локальную переменную информацию, которую нам нужно отобразить для пользователя, которые описаны выше:

using System;
using System.Net.NetworkInformation;
using System.Windows.Forms;

        namespace PingTest1
        {
            public partial class Form1 : Form
            {
                public Form1()
                {
                    InitializeComponent();
                }

                private void button1_Click(object sender, EventArgs e)
                {
                    Ping p = new Ping();
                    PingReply r;
                    string s;
                    s = textBox1.Text;
                    r = p.Send(s);

                    if (r.Status == IPStatus.Success)
                    {
                        lblResult.Text = "Ping to " + s.ToString() + "[" + r.Address.ToString() + "]" + " Successful"
                           + " Response delay = " + r.RoundtripTime.ToString() + " ms" + "\n";
                    }
                }

                private void textBox1_Validated(object sender, EventArgs e)
                {
                    if (string.IsNullOrWhiteSpace(textBox1.Text) || textBox1.Text == "")
                    {
                        MessageBox.Show("Please use valid IP or web address!!");
                    }
                }
            }

        }

3
задан Antonio Serrano 3 April 2017 в 14:38
поделиться

3 ответа

Использование незначительных тиков, как указано в потоке, опубликованном DavidG, должно работать. Ниже приведен MWE, который я адаптировал для вашей конкретной проблемы, заставляя основные тики появляться в первом из каждого месяца и используя малые тики для размещения меток между основными тиками:

import matplotlib as mpl
import matplotlib.pyplot as plt
import numpy as np
import datetime

# Generate some data for example :

yr = 2014
fig, ax = plt.subplots()

x0 = datetime.datetime(yr, 1, 1)
x = np.array([x0 + datetime.timedelta(days=i) for i in range(365)])

y1 = np.sin(2*np.pi*np.arange(365)/365) + np.random.rand(365)/5
y2 = np.sin(2*np.pi*np.arange(365)/365) + np.random.rand(365)/5 - 1

# Draw high and low temperatures lines :

ax.plot(x, y1, color='#c83c34')
ax.plot(x, y2, color='#28659c')
ax.fill_between(x, y2, y1, facecolor='#daecfd', alpha=0.5)

# Force the major ticks position on the first of each month and hide labels:

xticks = [datetime.datetime(yr, i+1, 1) for i in range(12)]
xticks.append(datetime.datetime(yr+1, 1, 1))
ax.set_xticks(xticks)
ax.tick_params(axis='both', direction='out', top=False, right=False)
ax.axis([xticks[0], xticks[-1], -2.5, 1.5])
ax.set_xticklabels([])

# CODE GOES HERE TO CENTER X-AXIS LABELS...

labels = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
          'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
mticks = ax.get_xticks()
ax.set_xticks((mticks[:-1]+mticks[1:])/2, minor=True)
ax.tick_params(axis='x', which='minor', length=0)
ax.set_xticklabels(labels, minor=True)
fig.tight_layout()

plt.show()

, что приводит к:

1
ответ дан Jean-Sébastien 15 August 2018 в 20:21
поделиться
  • 1
    Да! Оно работает! Спасибо Вам большое ;) – Antonio Serrano 3 April 2017 в 19:56

Почти, Jean-Sébastien . Все выглядит идеально, но в прошлом месяце. Это не отображается.

Ваше решение немного изменилось:

fig, ax = plt.subplots()

# Draw high and low temperatures lines:
plt.plot(x, y1, color = '#c83c34')
plt.plot(x, y2, color = '#28659c')

# Fill area between lines:
plt.gca().fill_between(x,
                       y2, y1,
                       facecolor='#daecfd',
                       alpha=0.5)

# Force major ticks on a monthly time scale only:
locator = mpl.dates.MonthLocator()
ax.xaxis.set_major_locator(locator)

# Hide major labels and set axis limits:
ax.set_xticklabels([])
ax.tick_params(axis='both', direction='out')
ax.axis(xmin=datetime.datetime(2014, 1, 1),
        xmax=datetime.datetime(2014, 12, 31),
        ymin=-50, ymax=50)

labels = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
          'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']

mticks = ax.get_xticks()
ax.set_xticks((mticks[:-1]+mticks[1:])/2, minor=True)
ax.tick_params(axis='x', which='minor', length=0)
ax.set_xticklabels(labels, minor=True)

plt.show()

Я получил этот график:

Есть ли какие-нибудь подсказки о том, что необходимо включить декабрь в метки по оси x? Во всяком случае, очень.

0
ответ дан Community 15 August 2018 в 20:21
поделиться
  • 1
    Вам нужно установить xmax как (2015, 1, 1) – Jean-Sébastien 3 April 2017 в 17:46
  • 2
    Я уже пробовал. Хуже всего, только заговор с января по июнь и пять тиков – Antonio Serrano 3 April 2017 в 17:48
  • 3
    Все выглядит нормально в моей настройке. Что-то изменит, если вы добавите plt.draw() после установки пределов оси? – Jean-Sébastien 3 April 2017 в 17:58
  • 4
    Возможно, это из-за версии рендеринга или matplotlib. В противном случае я не вижу, что случилось. Я выложу альтернативное решение с жестко закодированными точками толщины, 1 сек. – Jean-Sébastien 3 April 2017 в 18:24
  • 5
    Нет, plt.draw() не работает ни – Antonio Serrano 3 April 2017 в 19:56
1
ответ дан ImportanceOfBeingErnest 5 September 2018 в 19:37
поделиться
Другие вопросы по тегам:

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