Untitled

mail@pastecode.io avatar
unknown
python
2 months ago
4.2 kB
1
Indexable
Never
def Vertical_line(ds_dinh, line3_x_start, line3_x_end, line3_y, line4_y, ver_line_start, ver_line_end):
  X0 = line3_x_end - 1.5
  for dinh in ds_dinh:
    plt.plot([X0, X0], [ver_line_start, ver_line_end], color='black')
    #print(line3_y)
    plt.text(X0 +0.01 , ver_line_end, dinh, fontsize=12, verticalalignment='bottom', horizontalalignment='right')
    plt.text(X0 - 0.05, line3_y[0]-0.08, 'S', fontsize=12, verticalalignment='bottom', horizontalalignment='right')

    # Thêm nhãn 'D' kế bên giao điểm của Line5 và Line3
    plt.text(X0 + 0.16, line3_y[0]-0.08, 'D', fontsize=12, verticalalignment='bottom', horizontalalignment='right')

    plt.text(X0 - 0.05, line4_y[0]+0.02, 'S', fontsize=12, verticalalignment='bottom', horizontalalignment='right')

    # Thêm nhãn 'D' kế bên giao điểm của Line5 và Line3
    plt.text(X0 + 0.16, line4_y[0]+0.02, 'D', fontsize=12, verticalalignment='bottom', horizontalalignment='right')
    X0 -= 1

import matplotlib.pyplot as plt

# Tạo dữ liệu cho các đoạn thẳng
x_values = [1, 2, 3, 4, 5]
y_values_line1 = [1] * len(x_values)  # Đường thẳng thứ nhất nằm ở y=1
y_values_line2 = [2] * len(x_values)  # Đường thẳng thứ hai nằm ở y=2

# Giả sử điều chỉnh độ dài của các đường thẳng đi 0.5 đơn vị
y_values_line3 = [1.25] * (len(x_values) - 1)  # Đường thẳng thứ nhất ngắn hơn 1 đơn vị
y_values_line4 = [1.75] * (len(x_values) - 1)  # Đường thẳng thứ hai ngắn hơn 1 đơn vị


# Cắt bớt 2 điểm từ đầu bên trái của các đường thẳng
cut_points = 1
x_values_cut = x_values[cut_points:]
y_values_line3_cut = y_values_line3[cut_points:]
y_values_line4_cut = y_values_line4[cut_points:]


# Vẽ các đoạn thẳng
plt.plot(x_values, y_values_line1)
plt.plot(x_values, y_values_line2)
plt.plot(x_values_cut[:-1], y_values_line3_cut)  # Bỏ điểm cuối cùng của đường thẳng thứ nhất để giảm độ dài
plt.plot(x_values_cut[:-1], y_values_line4_cut)  # Bỏ điểm cuối cùng của đường thẳng thứ hai để giảm độ dài


# Thêm nhãn "GND" trên Line1
plt.text(x_values[-1] + 0.1, y_values_line1[-1], 'GND', fontsize=12, verticalalignment='bottom')            # distance_from_line1 = 0.1


# Thêm nhãn "VCC" kế bên Line2
plt.text(x_values[-1] + 0.1, y_values_line2[-1], 'VCC', fontsize=12, verticalalignment='bottom')            # distance_from_line2 = 0.1


# Thêm nhãn "p diffusion" kế bên Line3
plt.text(x_values_cut[-1], y_values_line3_cut[-1], 'n diffusion', fontsize=12, verticalalignment='bottom', horizontalalignment='right')


# Thêm nhãn "n diffusion" kế bên Line4
plt.text(x_values_cut[-1], y_values_line4_cut[-1], 'p diffusion', fontsize=12, verticalalignment='bottom', horizontalalignment='right')



# Tính toán trung điểm của line3 và line4
x_midpoint = (x_values_cut[-1] + x_values_cut[0]) / 2
y_midpoint = (y_values_line3_cut[-1] + y_values_line4_cut[-1]) / 2

# Gán trung điểm cho các điểm bắt đầu và kết thúc của đường thẳng line5
x_start = x_midpoint
x_end = x_midpoint
y_start = min(y_values_line3_cut + y_values_line4_cut) - 0.1  # Độ dài mở rộng 0.5 đơn vị
y_end = max(y_values_line3_cut + y_values_line4_cut) + 0.1    # Độ dài mở rộng 0.5 đơn vị


# Vẽ các đoạn thẳng
plt.plot(x_values, y_values_line1)
plt.plot(x_values, y_values_line2)
plt.plot(x_values_cut[:-1], y_values_line3_cut)  # Bỏ điểm cuối cùng của đường thẳng thứ nhất để giảm độ dài
plt.plot(x_values_cut[:-1], y_values_line4_cut)  # Bỏ điểm cuối cùng của đường thẳng thứ hai để giảm độ dài


# Tính toán tọa độ giao điểm của line5 và line3
x_intersection = x_midpoint
y_intersection = (y_values_line3_cut[-1] + y_start) / 2  # Lấy trung điểm y giữa điểm cuối cùng của line3 và y_start của line5  

plt.axis('off')

Vertical_line(["A", "B"], x_values_cut[0], x_values_cut[-1], y_values_line3_cut, y_values_line4, y_start, y_end)   
plt.show() 
Leave a Comment