2015-12-21 18 views
0

我想更改熊貓散點圖的x和y標籤。 X軸和Y軸是IP地址,我使用簡單的ip2int函數將它們轉換爲整數。我想在X和Y軸上有真正的「字符串」(即IP地址)標籤。我想這一點,但它不能很好地工作(見截圖)作爲熊貓散點圖中x和y標籤的IP地址

ipcon['a']=ipcon['srcip'].map(ip2int) 
ipcon['b']=ipcon['dstip'].map(ip2int) 
ax = ipcon.plot.scatter(x='a',y='b',s=50) 
ax.set_xticklabels(ipcon['srcip']) 
ax.set_yticklabels(ipcon['dstip']) 
ax.set_xlabel("Source IP") 
ax.set_ylabel("Destination IP") 

screenshot of the resulting scatter plot

反正是有解決這個問題?由於

**編輯 - 工作示例**

import pandas as pd 

%pylab inline 

ipconn=[["192.168.1.1","192.168.1.2"],["192.168.1.1","192.168.1.2"],["192.168.1.1","192.168.1.3"],["192.168.1.1","192.168.1.99"]] 

df = pd.DataFrame(ipconn) 

import socket 

import struct 


def ip2int(addr):                
    return struct.unpack("!I", socket.inet_aton(addr))[0]      


def int2ip(addr):                
    return socket.inet_ntoa(struct.pack("!I", addr)) 

df["x"]=df[0].map(ip2int) 
df["y"]=df[1].map(ip2int) 
ax = df.plot.scatter(x='x',y='y',s=50) 
ax.set_xticklabels(df[0]) 
ax.set_yticklabels(df[1]) 
ax.set_xlabel("Source IP") 
ax.set_ylabel("Destination IP") 

在這個例子中,你可以看到,X,Y軸標籤不與IP對準值

的最佳方式,我想可以設置一個函數來創建軸標籤。

+0

什麼是你想在散點圖繪圖源和目的IP地址在視覺上得到什麼?你最終會得到一系列垂直點。 –

+0

可否請您添加一些真實的代碼以便能夠重現您的問題?我的意思是在ordet中輸入一些樣本來運行你的代碼。 –

+0

@ cricket_007在這樣的圖表中,您將能夠看到特定主機是否正在掃描所有其他(垂直線)。您還將看到「關鍵」服務器,即回答所有其他主機(水平線)的主機。 – hoZr

回答

0

您需要設置蜱值您的標籤:

ax.set_xticklabels(df[0]) 
ax.set_yticklabels(df[1]) 
ax.set_xticks(df["x"]) 
ax.set_yticks(df["y"]) 
ax.set_xlabel("Source IP") 
ax.set_ylabel("Destination IP") 
+0

謝謝。它運作良好。我現在明白我的初始數據框是錯誤的。我真正想要繪製的是我的數據集的pd.crosstab,其中count爲點的大小。 – hoZr

+0

好聽。順便說一句,你可以[接受](http://stackoverflow.com/help/accepted-answer)一個答案,如果它解決了你的問題。 –