質問編集履歴
3
簡単な例に変えた
title
CHANGED
@@ -1,1 +1,1 @@
|
|
1
|
-
Python グラフ上に表示されない直線の
|
1
|
+
Python グラフ上に表示されない直線の凡例まで表示されてしまう
|
body
CHANGED
@@ -1,75 +1,29 @@
|
|
1
|
-
Pythonで描いた、複数の直線(
|
1
|
+
Pythonで描いた、複数の直線(y = x + m)のグラフを表示するコードを書きました。
|
2
|
-
この時、legend()によって、どの直線かがわかるように
|
2
|
+
この時、legend()によって、どの直線かがわかるように凡例を付けて表示するのですが、x,yともに範囲を絞っているため、グラフ上に表示されない直線が出てきます。この表示されていない直線のラベルが自動で表示されないようにする方法はあるのでしょうか。おそらく、legend()の引数を変えるのでしょうが。。。お分かりになる方、どうぞよろしくお願いします。
|
3
|
-
|
3
|
+
|
4
|
-
図に関してですが、ここでは変数vを10に設定しています。図を見ていただければわかると思いますが、(1,1,-1),(1,1,-2)が明らかにグラフとして表示されていないにも関わらず、ラベルが出てしまっています。
|
5
4
|
```python
|
6
5
|
import matplotlib.pyplot as plt
|
7
6
|
import numpy as np
|
8
|
-
from itertools import product
|
9
|
-
import pandas as pd
|
10
7
|
|
11
8
|
fig = plt.figure()
|
12
|
-
ax = fig.add_axes([0.
|
9
|
+
ax = fig.add_axes([0.25,0.3,0.3,0.6])
|
13
10
|
|
14
|
-
|
11
|
+
x = np.linspace(0, 100, 1000)
|
15
|
-
|
12
|
+
for m in range(1,10):
|
16
|
-
while judge is False or judge is True and not int(z) in range(10,31):
|
17
|
-
z = input(" 指定された通り(10~30 の内の整数で)入力してください!!!!!!!:")
|
18
|
-
judge = str.isdecimal(z)
|
19
|
-
else:
|
20
|
-
|
13
|
+
y = x + m
|
14
|
+
ax.plot(x, y, label=f"y = x + {m}", linestyle='solid')
|
15
|
+
|
16
|
+
plt.xlabel("x")
|
17
|
+
plt.ylabel("y")
|
21
18
|
|
22
|
-
K = range(0,4)
|
23
|
-
L = range(-2,3)
|
24
|
-
N = range(-4,5)
|
25
|
-
for k, l, n in product(K, L, N):
|
26
|
-
#x = np.linspace(20, 120, 1000)
|
27
|
-
if l == 0:
|
28
|
-
y = np.linspace(0, 100, 1000)
|
29
|
-
for m in range(1,5):
|
30
|
-
if (k,l,n) in [(1,0,m)]:
|
31
|
-
x = (0 * y + n * v) / k
|
32
|
-
if m == 1 or m == 2:
|
33
|
-
ax.plot(x, y, label=f"{(k,l,n)}", linestyle='solid', linewidth=5)
|
34
|
-
else:
|
35
|
-
ax.plot(x, y, label=f"{(k,l,n)}", linestyle='dashed')
|
36
|
-
else:
|
37
|
-
continue #理屈があり、線の太さを変えている。
|
38
|
-
|
39
|
-
else:
|
40
|
-
x = np.linspace(20, 120, 1000)
|
41
|
-
for j in range(-4,5):
|
42
|
-
if (k,l,n) in [(0,1,j), (1,-2,j), (1,-1,j), (1,1,j), (1,2,j), (2,-1,j), (3,-1,j)]:
|
43
|
-
y = (- k * x + n * v) / l
|
44
|
-
|
45
|
-
if (k,l,n) in [(1,-1,-2), (1,-1,-1), (1,1,-2), (1,1,-1), (1,1,2)]:
|
46
|
-
ax.plot(x, y, label=f"{(k,l,n)}", linestyle='solid', linewidth=5)
|
47
|
-
elif (k,l,n) in [(1,-1,2), (1,-1,1)]:
|
48
|
-
ax.plot(x, y, label=f"{(k,l,n)}", linestyle='solid', linewidth=2)
|
49
|
-
elif (k,l,n) in [(0,1,-4), (0,1,-3), (0,1,-2), (0,1,-1), (0,1,0), (1,-1,-4), (1,1,-4), (1,1,-3), (1,1,-2), (1,1,-1), (1,1,0), (1,2,-4), (1,2,-3), (1,2,-2), (1,2,-1), (1,2,0), (1,2,1), (2,-1,-4), (2,-1,-3), (3,-1,-4), (3,-1,-3), (3,-1,-2), (3,-1,-1), (0,1,3), (0,1,4), (1,-2,-4), (1,-2,-3), (1,-2,-2), (2,-1,0), (2,-1,3), (2,-1,4)]:
|
50
|
-
continue #理屈があって、これらの直線をプロットしないようにした。
|
51
|
-
else:
|
52
|
-
ax.plot(x, y, label=f"{(k,l,n)}", linestyle='dashed')
|
53
|
-
|
54
|
-
ax.set_xlim(20, 100)
|
55
|
-
ax.set_ylim(0, 100)
|
56
|
-
#ax.grid(True)
|
57
|
-
else:
|
58
|
-
continue
|
59
|
-
|
60
|
-
plt.xlabel("ν1", fontsize=20)
|
61
|
-
plt.ylabel("ν2", fontsize=20)
|
62
|
-
|
63
19
|
plt.xticks(fontsize=14)
|
64
20
|
|
65
|
-
locs = np.linspace(0, 100, 6)
|
66
|
-
|
21
|
+
ax.legend(bbox_to_anchor=(1.1, 1), loc='upper left')
|
67
22
|
|
23
|
+
ax.set_xlim(0, 5)
|
68
|
-
|
24
|
+
ax.set_ylim(0, 5)
|
69
25
|
|
70
|
-
ax.legend(bbox_to_anchor=(1.2, 1), loc='upper left', fontsize=14, borderaxespad=0, ncol=2, title='(k,l,n)', title_fontsize=16)
|
71
|
-
ax.set_title(f"
|
26
|
+
ax.set_title(f"y = x + m", fontsize=20)
|
72
27
|
|
73
28
|
plt.show()
|
74
|
-
```
|
29
|
+
```
|
75
|
-

|
2
誤字
title
CHANGED
File without changes
|
body
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
Pythonで描いた、複数の直線(k*x + l*y = n*v (k,l,nは整数。vは自分で設定する定数))のグラフを表示するコードとその図を載せます。
|
2
2
|
この時、legend()によって、どの直線かがわかるように(k,l,n)のラベルを付けて表示するのですが、x,yともに範囲を絞っているため、グラフ上に表示されない直線が出てきます。この表示されていない直線のラベルが自動で表示されないようにする方法はあるのでしょうか。お分かりになる方、どうぞよろしくお願いします。
|
3
3
|
[補足]
|
4
|
-
図に関してですが、ここでは変数vを10に設定しています。図を見ていただければわかると思いますが、(1,1,-1),(1,1,-2)
|
4
|
+
図に関してですが、ここでは変数vを10に設定しています。図を見ていただければわかると思いますが、(1,1,-1),(1,1,-2)が明らかにグラフとして表示されていないにも関わらず、ラベルが出てしまっています。
|
5
5
|
```python
|
6
6
|
import matplotlib.pyplot as plt
|
7
7
|
import numpy as np
|
1
文章の修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
Pythonで描いた、複数の直線(k*x + l*y = n*v (k,l,nは整数。vは自分で設定する定数))のグラフを表示するコードとその図を載せます。
|
2
2
|
この時、legend()によって、どの直線かがわかるように(k,l,n)のラベルを付けて表示するのですが、x,yともに範囲を絞っているため、グラフ上に表示されない直線が出てきます。この表示されていない直線のラベルが自動で表示されないようにする方法はあるのでしょうか。お分かりになる方、どうぞよろしくお願いします。
|
3
3
|
[補足]
|
4
|
-
図に関してですが、ここでは変数vを10に設定しています。図を見ていただければわかると思いますが、(1,1,-1),(1,1,-2)などが明らかにグラフに
|
4
|
+
図に関してですが、ここでは変数vを10に設定しています。図を見ていただければわかると思いますが、(1,1,-1),(1,1,-2)などが明らかにグラフとして表示されていないにも関わらず、ラベルが出てしまっています。
|
5
5
|
```python
|
6
6
|
import matplotlib.pyplot as plt
|
7
7
|
import numpy as np
|