Как обозначить линию значениями по оси Y? - PullRequest
0 голосов
/ 28 октября 2018

enter image description here

    # -*- coding: utf-8 -*-
"""
Created on Sun Oct 28 17:35:48 2018

@author: User
"""

import matplotlib
matplotlib.use('GTKAgg')

import matplotlib.pyplot as plt
import matplotlib.transforms
import numpy as np
from sklearn.linear_model import LinearRegression
import pandas


# Load CSV and columns
df = pandas.read_csv(r'C:\Users\User\Desktop\dataset.csv')
print (df.head())

df = df[['TTL_value','packet_size']]

#X = df['Input_port']
#Y = df['Output_port']


X=np.array(df.packet_size)
Y=np.array(df.TTL_value)

#Split the data into training/testing sets
X_train = X[:-100]
X_test = X[-100:]

# Split the targets into training/testing sets
Y_train = Y[:-100]
Y_test = Y[-100:]

# Plot outputsregr = linear_model.LinearRegression()
regr=LinearRegression(fit_intercept=True)
regr.fit(X_test[:,np.newaxis],Y_test)

X_testfit=np.linspace(0,100000)
Y_testfit=np.linspace(255,255)
#Y_testfit=regr.predict(X_testfit[:,np.newaxis])
print ("Normal Pakctet size range is 7 to 65542")
plt.scatter(X_test, Y_test,  color='black')
plt.plot(X_testfit, Y_testfit,  color='red',linewidth=3)
plt.title('Test Data')
plt.xlabel('packet_size')
plt.ylabel('TTL_value')
plt.xticks((0,20000,40000,60000,80000,100000))
plt.yticks((0,50,100,150,200,250,300))

plt.show()
print ("The TTL value more than 255 is a malicious traffic")

Я хочу отобразить красную линию со значениями оси Y. Красная линия на 255. Я пробовал много раз, но действительно не мог этого сделать.

1 Ответ

0 голосов
/ 28 октября 2018

Если я вас правильно понял, вы хотите аннотировать красную горизонтальную линию в точке y = 255 с соответствующим значением y (255).В этом случае, вот пример рабочего решения для вас.Вам просто нужно использовать plt.text с желаемыми координатами x и y и строкой, которую вы хотите поставить в качестве текста.Здесь я использую значение y в качестве строки.Y_testfit[0]*1.005 слегка смещает текст над горизонтальной линией, чтобы избежать его наложения.

Вы можете адаптировать это решение для своей задачи.

import matplotlib.pyplot as plt

X_testfit=np.linspace(0,100000)
Y_testfit=np.linspace(255,255)

plt.plot(X_testfit, Y_testfit, '-r', lw=3)
plt.text(20000, Y_testfit[0]*1.005, 'y=%d' %Y_testfit[0], fontsize=20)

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...