Concatenate hai tuple một số phần tử trùng nhau

Mình đang muốn sử dụng matplotlib để vẽ đồ thị, đang vướng mắc ở biến trục tung.
Cụ thể, mình đang có hai tuple tên xs và xs2 có độ dài lần lượt là 396 và 223, trong hai tuple này có một số phần tử trùng nhau, có dạng:

xs = ('a','b','c','d','e')
xs2 = ('b','c','e','f','g')

Mình muốn thu đc tuple X

X = ('a','b','c','d','e','f','g')

Rất mong nhận đc sự giúp đỡ
Dưới là phần code mình đang thực hiện:

import matplotlib.pyplot as plt
import csv,sys,datetime
from collections import defaultdict
reader = csv.DictReader(open(sys.argv[1], 'r'))

obamadonations = defaultdict(lambda:0)
mccaindonations = defaultdict(lambda:0)

for row in reader:
    name = row['cand_nm']
    datestr = row['contb_receipt_dt']
    amount  = float(row['contb_receipt_amt'])
    if amount < 0:
	    line = '\t'.join(row.values())
        #print(line)
    date = datetime.datetime.strptime(datestr, '%d-%b-%y')

    if 'Obama' in name:
	    obamadonations[date] += amount
    elif 'McCain' in name:
	    mccaindonations[date] += amount

fig = plt.figure(figsize=(15,10))

#dictionaries
sorted_by_date = sorted(obamadonations.items(), key=lambda (key,val): key)
sorted_by_date2 = sorted(mccaindonations.items(), key=lambda (key,val): key)

xs,ys = zip(*sorted_by_date)
xs2,ys2 = zip(*sorted_by_date2)

print("Tuple xs:", xs)
print("Length of xs:", len(xs))
print("Tuple xs2:", xs2)
print("Length of xs2:", len(xs2))



sp1 = fig.add_subplot(211)
sp1.plot(xs, ys, label='line 1')

sp2 = fig.add_subplot(212)
sp2.plot(xs2, ys2,label='line 2')

plt.legend(loc='upper center', ncol = 4)
plt.savefig('test.png', format='png')
X = tuple(set(xs) + set(xs2))

có ok không bạn?

Điểm trừ là cách này không đảm bảo được thứ tự của các phần tử như trong 2 tuple xs và xs2.

1 Like

ko ok bạn ơi, mình vẫn không thể gộp 2 đồ thị vào 1 đồ thị
mình sử dụng như sau:

X = tuple(set(xs)+ set(xs2))
sp1 = fig.add_subplot(211)

sp1.plot(X, ys, label='line 1')

sp2 = fig.add_subplot(212)

sp2.plot(X, ys2,label='line 2')

plt.legend(loc='upper center', ncol = 4)

plt.savefig('test.png', format='png')

Xin loi minh khong go dau dc.
xs va xs2 la truc hoanh nhu 2 hinh tren, the hien ngay/thang/nam nen dung cach tim min max nhu ban co le khong hop ly.

đúng rồi, mình nghĩ cần concatenate hai tuple này (xs,xs2). Chắc chắn làm đc (vì tutorial họ plot đc nhưng ko hướng dẫn cụ thể)

đồ thị mình muốn thu đc (lấy từ tutorial):

Mình không hiểu, nếu muốn thu được như hình thì đâu dùng subplot.

Hơn nữa x1, x2 là trục hoành mà??

Matplotlib vẫn có thể vẽ multi-curves mà số liệu của trục hoành của các đường là không đồng nhất. Phía dưới là ví dụ:

import matplotlib.pyplot as plt
import random

x1 = range(1, 300, 2)
x2 = range(1, 300, 3)
y1 = random.sample(range(400), len(x1))
y2 = random.sample(range(400), len(x2))

plt.plot(x1, y1)
plt.plot(x2, y2)
plt.show()
2 Likes

Cảm ơn bạn, mình đã nhận ra rằng ko cần thiết dùng subplot.
Làm như ví dụ của bạn thành công. Tuy nhiên bạn có thể giải thích vì sao đồ thị mình vẽ đc (trên) và đồ thị gốc (dưới) lại có sự khác nhau ở giá trị trục hoành ko ?

Ảnh mình vẽ

Ảnh gốc

Bạn có thể dùng set_xlim để thay đổi scale của trục x.

Là bạn chưa google đủ thôi.

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?